您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 设计及方案 > Windows网络编程课程设计
目录1.设计目的及意义………………………………………………………………………22.简单的需求分析………………………………………………………………………23.系统总体设计……………………………………………………………………..24.系统功能模块及关键代码………………………………………………………….35.调试与测试…………………………………………………………………………..126.设计体会…………………………………………………………………………….14-1-1.设计目的及意义。本局域网消息广播系统的设计开发,目的主要是为一个局域网中的服务器向所有主机发送消息,目前公司中一般都有比较多的电脑,假如一台管理员的电脑想向所有的其它员工电脑发送消息的话,如果通过每次只向一个员工电脑发送消息的话,那就要发送很多次了,这样就浪费有很多时间,本系统就是基于一个这样的目的才开发的,只要管理员电脑运行本系统服务器程序,员工电脑运行客户端程序,只要管理员在电脑里输入一次要发送给员工的信息,所有的员工都能马上收到发来的信息,本系统的意义在于为企业,公司等有多台电脑管理的部门提供了方便,不必重复输入相同信息,也不必多次发送相同内容,节约了大量的时间。2.简单的需求分析。目前很多公司,企业及学校等等一般都有比较多的电脑,员工工作时,部门经理也经常会与员工交流工作中的一些问题,也会向员工发布一些通知,如果向每台员工电脑都发送一次相同的信息,就会多次重复的输入,重复发送,这样就会降低工作效率,从而本局域网消息广播系统的应用还是比较大的,基本上目前每个公司,企业和学校都会使用与本系统相关的系统来提高工作效率。3.系统的总体设计。本系统流程图为:4.系统功能模块及关键代码局域网消息广播服务器端用户端设置端口发送消息清除消息关闭连接服务器断开连接-2-首先服务器端程序运行后,就会弹出“端口设置对话框”,提示输入服务器端的端口号,这个功能是由CPortSetDlg对话框类实现的,通过继承windows类实现,主要代码如下:classCPortSetDlg:publicCDialog{//Constructionpublic:CPortSetDlg(CWnd*pParent=NULL);//standardconstructor//DialogData//{{AFX_DATA(CPortSetDlg)enum{IDD=IDD_DIALOG1};UINTm_PortSet;//}}AFX_DATA//Overrides//ClassWizardgeneratedvirtualfunctionoverrides//{{AFX_VIRTUAL(CPortSetDlg)protected:virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport//}}AFX_VIRTUAL//Implementationprotected://Generatedmessagemapfunctions//{{AFX_MSG(CPortSetDlg)//NOTE:theClassWizardwilladdmemberfunctionshere//}}AFX_MSGDECLARE_MESSAGE_MAP()};服务器端口设置好后,系统就会自动弹出一个对话框提示“服务器端口设置ok!”,点“确定”后,就会进入服务器端主界面。主界面主要有有个输入框,及4个功能模块:(1)设置端口功能模块,主要是用于设置服务器端口号,主要代码如下:voidCBCServerDlg::OnPortSet(){//TODO:AddyourcontrolnotificationhandlercodehereCPortSetDlgdlg;if(dlg.DoModal()==IDOK){-3-m_pSocket=newCListenSocket;if(m_pSocket-Create(dlg.m_PortSet)){if(!m_pSocket-Listen())MessageBox(服务器端口设置错误!,服务器端口设置);elseMessageBox(服务器端口设置ok!,服务器端口设置);}}}(2)发送消息功能模块主要代码:voidCBCServerDlg::OnOK(){//TODO:Addextravalidationhereif(!m_SocketList.IsEmpty()){UpdateData();POSITIONpos;CClientSocket*pSocket=(CClientSocket*)m_SocketList.GetHead();for(pos=m_SocketList.GetHeadPosition();pos!=NULL;){pSocket=(CClientSocket*)m_SocketList.GetNext(pos);pSocket-Send(LPCTSTR(m_OutInfo),m_OutInfo.GetLength());}}elseMessageBox(不能建立服务器连接,不能广播信息,错误提示对话框);//CDialog::OnOK();}(3)清除消息功能模块主要代码:voidCBCServerDlg::OnClearOut(){//TODO:Addyourcontrolnotificationhandlercodeherem_OutInfo.Empty();UpdateData(false);}(4)关闭服务器功能模块主要代码:voidCBCServerDlg::OnCancel(){//TODO:Addextracleanuphereif(m_pSocket)-4-{deletem_pSocket;}m_SocketList.RemoveAll();CDialog::OnCancel();CDialog::OnCancel();}其中有个与用户连接是否成功的判断提示代码为:voidCBCServerDlg::OnOK(){//TODO:Addextravalidationhereif(!m_SocketList.IsEmpty()){UpdateData();POSITIONpos;CClientSocket*pSocket=(CClientSocket*)m_SocketList.GetHead();for(pos=m_SocketList.GetHeadPosition();pos!=NULL;){pSocket=(CClientSocket*)m_SocketList.GetNext(pos);pSocket-Send(LPCTSTR(m_OutInfo),m_OutInfo.GetLength());}}elseMessageBox(不能建立服务器连接,不能广播信息,错误提示对话框);//CDialog::OnOK();}voidCClientSocket::OnReceive(intnErrorCode){//TODO:Addyourspecializedcodehereand/orcallthebaseclass((CBCServerDlg*)(AfxGetApp()-m_pMainWnd))-GetSocketMsg(this);CSocket::OnReceive(nErrorCode);}classCBCServerDlg:publicCDialog{//Constructionpublic:-5-CBCServerDlg(CWnd*pParent=NULL);//standardconstructorvoidGetSocketMsg(CClientSocket*pSocket);CPtrListm_SocketList;CListenSocket*m_pSocket;//DialogData//{{AFX_DATA(CBCServerDlg)enum{IDD=IDD_BCServer_DIALOG};CStringm_OutInfo;//}}AFX_DATA//ClassWizardgeneratedvirtualfunctionoverrides//{{AFX_VIRTUAL(CBCServerDlg)protected:virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport//}}AFX_VIRTUAL//Implementationprotected:HICONm_hIcon;//Generatedmessagemapfunctions//{{AFX_MSG(CBCServerDlg)virtualBOOLOnInitDialog();afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);afx_msgvoidOnPaint();afx_msgHCURSOROnQueryDragIcon();afx_msgvoidOnPortSet();//afx_msgvoidOnClearIn();afx_msgvoidOnClearOut();virtualvoidOnCancel();virtualvoidOnOK();//}}AFX_MSGDECLARE_MESSAGE_MAP()};程序运行开始时,先初始化服务器端程序主要代码是:BOOLCBCServerDlg::OnInitDialog(){CDialog::OnInitDialog();-6-//AddAbout...menuitemtosystemmenu.//IDM_ABOUTBOXmustbeinthesystemcommandrange.ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX0xF000);CMenu*pSysMenu=GetSystemMenu(FALSE);if(pSysMenu!=NULL){CStringstrAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if(!strAboutMenu.IsEmpty()){pSysMenu-AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);}}//Settheiconforthisdialog.Theframeworkdoesthisautomatically//whentheapplication'smainwindowisnotadialogSetIcon(m_hIcon,TRUE);//SetbigiconSetIcon(m_hIcon,FALSE);//Setsmallicon//TODO:AddextrainitializationhereOnPortSet();returnTRUE;//returnTRUEunlessyousetthefocustoacontrol}voidCBCServerDlg::OnSysCommand(UINTnID,LPARAMlParam){if((nID&0xFFF0)==IDM_ABOUTBOX){CAboutDlgdlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID,lParam);}}-7-classCClientUseSocket:publicCSocket{//Attributespublic://Operationspublic:CClientUseSocket();virtual~CClientUseSocket();//Overridespublic://ClassWizardgeneratedvirtualfunctionoverrides//{{AFX_VIRTUAL(
本文标题:Windows网络编程课程设计
链接地址:https://www.777doc.com/doc-6284369 .html