网络程序设计实训报告(广播程序设计).doc_第1页
网络程序设计实训报告(广播程序设计).doc_第2页
网络程序设计实训报告(广播程序设计).doc_第3页
网络程序设计实训报告(广播程序设计).doc_第4页
网络程序设计实训报告(广播程序设计).doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

XXXX大 学实习(实训)报告 名称 实用网络程序设计实训 XX年X月X日至 XX年X月X日共一周院 系 计算机工程系 班 级 XXXXXXX 姓 名 XXXX 系主任 XXXX 教研室主任 XXXXX 指导教师 XXXX XXXXX XXXXX 大 学实习(实训)任务书 名 称: 实用网络程序设计实训 起讫时间: XXXXXXXXXXXXXX 院 系: 计算机工程系 班级: XXXXXXX 指导教师: XXXXXXXXXX 系 主 任: XXXXX 一、实习(实训)目的和要求通过实训,进一步掌握网络编程的知识和技能,掌握解决实际问题以及进行一定网络程序设计的能力。实训注重网络程序的细节技术,进一步研究网络编程函数和相关MFC类,并且着重解决编程中可能存在的问题和难点,同时将这些知识应用于实际开发中,利用理论知识指导实践的开发。二、实习(实训)内容1、文件传输的设计2、聊天软件的设计3、广播程序的设计4、本地计算机信息的查询5、局域网信息的查询学生按班级内序号分组,每5位同学一组,每人完成一个项目。三、实习(实训)方式 集中 分散 校内 校外四、实习(实训)具体安排以小组为单位,每个小组5台计算机,计算机之间通过局域网连接。共同完成小组任务,并完成调试。序号教学内容题目学 时 分 配小计讲课实训1文件传输的分析与设计4132聊天软件的分析与设计443广播程序的分析与设计444本地计算机信息的查询445局域网信息的查询446项目整体测试413合 计24222五、实习(实训)报告内容(有指导书的可省略)1、实训地点:XXXX2、实训时间:XXXXXXX3、小组成员:XXXXXXXXXX4、具体内容:广播程序设计5、实训总结:广播程序设计4.1 设计分析与原理网络会议室与聊天室程序类似,其本质就是一种多点群发的的通信方式。在电子教室软件的实际应用过程中,经常需要组织分小组进行讨论,这时就需要建立几个组群,每个组内可以发起讨论,交流意见,这就是网络会议室应用程序。本章的网络会议室功能虽与上一章的聊天室类似,但采用的是一种更好的实现方法IP多播技术。 网络会议室需要有以下主要功能: 用户可以选择参加某个会议 用户可以在会议上发表言论,并且用户的发言会即时传递给每个参加会议的人 用户可以随时看到参加会议的其他人的发言 用户可以随时选择退出会议。需要时,还可以再加入进来。 界面设计:关键技术分析: 根据参与一次通信的对象的多少,可将通信分为两大类: 一类是点对点通信,也称其为单播通信,TCP协议仅支持这种单播通信方式 一类是多点通信,也称为群或组通信,UDP协议既支持单播通信方式,又支持多点通信方式。广播通信: 所谓广播是指一种同时与网络中所有主机进行交互数据的通信方式,传输者通过一次数据传输就可以使网络上的所有主机接收到这个数据信息。 广播通信的主要用途是资源发现和减少网络数据流量。 用于指示网络中所有主机的地址称为广播地址。广播地址有直接地址和有限地址之分。 直接广定网络(已知网络号)发送数据包的情况,若不知道网络号,又要向本地网络发送广播数据包,就需要使用有限广播地址255.255.255.255 。 核心程序IP广播: 一个IP广播程序分成两个部分,一个是广播端,一个是接收端。IP多播的网络会议室: 多播是指一种同时与多台主机进行交互数据的通信方式,传输者通过一次传输就将数据信息传送给一组接收者。 与广播不同的是多播只向事先规划好的多播组(由多台主机组成)发送数据,而不是向某个网络的所有主机发送数据。 多播组是零个或多个使用同一IP目的地址的主机集合,其成员在位置上和数量上均没有任何限制。 多播不局限于局域网,也可用于广域网。 多播地址: IP地址空间被划分为A、B、C三类。第四类即D类地址被保留用做多播地址。 从224.0.0.0到239.255.255.255间的所有IP地址都属于D类地址 多播地址的范围是224.0.0.0239.255.255.255 4.2 程序流程图广播流程:4.3 程序代码广播端源文件:#include stdafx.h#include Broadcast.h#include BroadcastDlg.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CBroadcastAppBEGIN_MESSAGE_MAP(CBroadcastApp, CWinApp)/AFX_MSG_MAP(CBroadcastApp)/ NOTE - the ClassWizard will add and remove mapping macros here./ DO NOT EDIT what you see in these blocks of generated code!/AFX_MSGON_COMMAND(ID_HELP, CWinApp:OnHelp)END_MESSAGE_MAP()/ CBroadcastApp constructionCBroadcastApp:CBroadcastApp()/ Place all significant initialization in InitInstance/ The one and only CBroadcastApp objectCBroadcastApp theApp;/ CBroadcastApp initializationBOOL CBroadcastApp:InitInstance()if (!AfxSocketInit()AfxMessageBox(IDP_SOCKETS_INIT_FAILED);return FALSE;AfxEnableControlContainer();/ Standard initialization/ If you are not using these features and wish to reduce the size/ of your final executable, you should remove from the following/ the specific initialization routines you do not need.#ifdef _AFXDLLEnable3dControls();/ Call this when using MFC in a shared DLL#elseEnable3dControlsStatic();/ Call this when linking to MFC statically#endifCBroadcastDlg dlg;m_pMainWnd = &dlg;int nResponse = dlg.DoModal();if (nResponse = IDOK)/ dismissed with OKelse if (nResponse = IDCANCEL)/ dismissed with Cancel/ Since the dialog has been closed, return FALSE so that we exit the/ application, rather than start the applications message pump.return FALSE;#include stdafx.h#include Broadcast.h#include BroadcastDlg.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:/AFX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP()/ CBroadcastDlg dialogCBroadcastDlg:CBroadcastDlg(CWnd* pParent /*=NULL*/): CDialog(CBroadcastDlg:IDD, pParent)/AFX_DATA_INIT(CBroadcastDlg)/ NOTE: the ClassWizard will add member initialization here/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);void CBroadcastDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CBroadcastDlg)/ NOTE: the ClassWizard will add DDX and DDV calls hereDDX_Text(pDX, IDC_MESSAGE, m_message);DDX_Control (pDX, IDC_LIST, m_show);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CBroadcastDlg, CDialog)/AFX_MSG_MAP(CBroadcastDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BROADCAST, OnBroadcast)ON_LBN_SELCHANGE(IDC_LIST, OnSelchangeList)/AFX_MSG_MAPEND_MESSAGE_MAP()/*-线程函数名:ListenThread属性:全局函数功能:接收对方聊天者发来的聊天信息,并显示到列表框中参数p-指向界面对话框的指针-*/UINT ListenThread(LPVOID p)/获取指向界面对话框的指针,通过该指针可以调用界面上的控件CBroadcastDlg *pDlg=(CBroadcastDlg *)p;char buff256=0;SOCKET RecvSocket;RecvSocket=socket(AF_INET,SOCK_DGRAM,0);if(RecvSocket = INVALID_SOCKET)return -1;int port=8888;/设置服务器、客户的地址和端口struct sockaddr_in Addr;Addr.sin_family = AF_INET;Addr.sin_addr.S_un.S_addr=INADDR_ANY;Addr.sin_port = htons(port);if(bind(RecvSocket,(LPSOCKADDR)&Addr,sizeof(Addr) = SOCKET_ERROR)return -1;int len=sizeof(Addr);while(1)if(recvfrom (RecvSocket,buff,sizeof(buff),0,(LPSOCKADDR)&Addr,(int*)&len)=SOCKET_ERROR)return -1;pDlg-m_show.InsertString(-1,buff);memset(buff,0,sizeof(buff);closesocket(RecvSocket);return 1;/ CBroadcastDlg message handlersBOOL CBroadcastDlg:OnInitDialog()CDialog:OnInitDialog();/ Add About. menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small iconAfxBeginThread (ListenThread,this);/创建一个新线程return TRUE; / return TRUE unless you set the focus to a controlvoid CBroadcastDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);/ If you add a minimize button to your dialog, you will need the code below/ to draw the icon. For MFC applications using the document/view model,/ this is automatically done for you by the framework.void CBroadcastDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();/ The system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CBroadcastDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;void CBroadcastDlg:OnBroadcast() UpdateData(true);/发送数据对象的定义char buff256=0;SOCKET SendSocket;SendSocket=socket(AF_INET,SOCK_DGRAM,0);if(SendSocket = INVALID_SOCKET)return;bool op=true;setsockopt(SendSocket, SOL_SOCKET, SO_BROADCAST, (char FAR *)&op, sizeof(op);/发送数据的初始化strcpy(buff,m_message);/设置地址和端口struct sockaddr_in Addr;Addr.sin_family = AF_INET;Addr.sin_addr.s_addr=inet_addr(255.255.255.255);/有限广播地址Addr.sin_port = htons(8888);if(m_message.IsEmpty()MessageBox(没有输入发送内容!,NULL,MB_OK);return;if(sendto(SendSocket,buff,sizeof(buff),0,(LPSOCKADDR)&Addr,sizeof(Addr) = SOCKET_ERROR)MessageBox(发送信息错误!,NULL,MB_OK);return;closesocket(SendSocket);void CBroadcastDlg:OnSelchangeList() 接收端源文件:#include stdafx.h#include Recv.h#include RecvDlg.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CRecvAppBEGIN_MESSAGE_MAP(CRecvApp, CWinApp)/AFX_MSG_MAP(CRecvApp)/ NOTE - the ClassWizard will add and remove mapping macros here./ DO NOT EDIT what you see in these blocks of generated code!/AFX_MSGON_COMMAND(ID_HELP, CWinApp:OnHelp)END_MESSAGE_MAP()/ CRecvApp constructionCRecvApp:CRecvApp()/ Place all significant initialization in InitInstance/ The one and only CRecvApp objectCRecvApp theApp;/ CRecvApp initializationBOOL CRecvApp:InitInstance()if (!AfxSocketInit()AfxMessageBox(IDP_SOCKETS_INIT_FAILED);return FALSE;AfxEnableControlContainer();/ Standard initialization/ If you are not using these features and wish to reduce the size/ of your final executable, you should remove from the following/ the specific initialization routines you do not need.#ifdef _AFXDLLEnable3dControls();/ Call this when using MFC in a shared DLL#elseEnable3dControlsStatic();/ Call this when linking to MFC statically#endifCRecvDlg dlg;m_pMainWnd = &dlg;int nResponse = dlg.DoModal();if (nResponse = IDOK)/ dismissed with OKelse if (nResponse = IDCANCEL)/ dismissed with Cancel/ Since the dialog has been closed, return FALSE so that we exit the/ application, rather than start the applications message pump.return FALSE;#include stdafx.h#include Recv.h#include RecvDlg.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endifUINT ListenThread(LPVOID p);/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:/AFX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP()/ CRecvDlg dialogCRecvDlg:CRecvDlg(CWnd* pParent /*=NULL*/): CDialog(CRecvDlg:IDD, pParent)/AFX_DATA_INIT(CRecvDlg)/ NOTE: the ClassWizard will add member initialization here/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);void CRecvDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CRecvDlg)DDX_Control(pDX, IDC_LIST, m_show);DDX_Text (pDX, IDC_MESSAGE, m_strMessage);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CRecvDlg, CDialog)/AFX_MSG_MAP(CRecvDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_RECV, OnRecv)ON_BN_CLICKED(IDC_SEND, OnSend)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CRecvDlg message handlersBOOL CRecvDlg:OnInitDialog()CDialog:OnInitDialog();/ Add About. menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization hereAfxBeginThread (ListenThread,this);/创建一个新线程return TRUE; / return TRUE unless you set the focus to a controlvoid CRecvDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);/ If you add a minimize button to your dialog, you will need the code below/ to draw the icon. For MFC applications using the document/view model,/ this is automatically done for you by the framework.void CRecvDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();/ The system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CRecvDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;/*-线程函数名:ListenThread属性:全局函数功能:接收对方聊天者发来的聊天信息,并显示到列表框中参数p-指向界面对话框的指针-*/UINT ListenThread(LPVOID p)/获取指向界面对话框的指针,通过该指针可以调用界面上的控件CRecvDlg *pDlg=(CRecvDlg *)p;char buff256=0;SOCKET RecvSocket;RecvSocket=socket(AF_INET,SOCK_DGRAM,0);if(RecvSocket = INVALID_SOCKET)return -1;int port=8888;/设置服务器、客户的地址和端口struct sockaddr_in Addr;Addr.sin_family = AF_INET;Addr.sin_addr.S_un.S_addr=INADDR_ANY;Addr.sin_port = htons(port);i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论