Windows网络编程课程设计报告书_第1页
Windows网络编程课程设计报告书_第2页
Windows网络编程课程设计报告书_第3页
Windows网络编程课程设计报告书_第4页
Windows网络编程课程设计报告书_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

./目录设计目的及意义………………………2简单的需求分析………………………2系统总体设计……………………..2系统功能模块及关键代码………….3调试与测试…………..12设计体会…………….141.设计目的及意义。本局域网消息广播系统的设计开发,目的主要是为一个局域网中的服务器向所有主机发送消息,目前公司中一般都有比较多的电脑,假如一台管理员的电脑想向所有的其它员工电脑发送消息的话,如果通过每次只向一个员工电脑发送消息的话,那就要发送很多次了,这样就浪费有很多时间,本系统就是基于一个这样的目的才开发的,只要管理员电脑运行本系统服务器程序,员工电脑运行客户端程序,只要管理员在电脑里输入一次要发送给员工的信息,所有的员工都能马上收到发来的信息,本系统的意义在于为企业,公司等有多台电脑管理的部门提供了方便,不必重复输入相同信息,也不必多次发送相同容,节约了大量的时间。2.简单的需求分析。目前很多公司,企业及学校等等一般都有比较多的电脑,员工工作时,部门经理也经常会与员工交流工作中的一些问题,也会向员工发布一些通知,如果向每台员工电脑都发送一次相同的信息,就会多次重复的输入,重复发送,这样就会降低工作效率,从而本局域网消息广播系统的应用还是比较大的,基本上目前每个公司,企业和学校都会使用与本系统相关的系统来提高工作效率。3.系统的总体设计。本系统流程图为:局域网消息广播局域网消息广播服务器端用户端设置端口发送消息清除消息关闭连接服务器 断开连接4.系统功能模块及关键代码首先服务器端程序运行后,就会弹出"端口设置对话框",提示输入服务器端的端口号,这个功能是由CPortSetDlg对话框类实现的,通过继承windows类实现,主要代码如下:classCPortSetDlg:publicCDialog{//Constructionpublic: CPortSetDlg<CWnd*pParent=NULL>;//standardconstructor//DialogData //{{AFX_DATA<CPortSetDlg> enum{IDD=IDD_DIALOG1}; UINT m_PortSet; //}}AFX_DATA//Overrides //ClassWizardgeneratedvirtualfunctionoverrides //{{AFX_VIRTUAL<CPortSetDlg> protected: virtualvoidDoDataExchange<CDataExchange*pDX>;//DDX/DDVsupport //}}AFX_VIRTUAL//Implementationprotected: //Generatedmessagemapfunctions //{{AFX_MSG<CPortSetDlg> //NOTE:theClassWizardwilladdmemberfunctionshere //}}AFX_MSG DECLARE_MESSAGE_MAP<>};服务器端口设置好后,系统就会自动弹出一个对话框提示"服务器端口设置ok!",点"确定"后,就会进入服务器端主界面。主界面主要有有个输入框,及4个功能模块:〔1设置端口功能模块,主要是用于设置服务器端口号,主要代码如下:voidCBCServerDlg::OnPortSet<>{ //TODO:AddyourcontrolnotificationhandlercodehereCPortSetDlgdlg; if<dlg.DoModal<>==IDOK> { m_pSocket=newCListenSocket; if<m_pSocket->Create<dlg.m_PortSet>> { if<!m_pSocket->Listen<>> MessageBox<"服务器端口设置错误!","服务器端口设置">; else MessageBox<"服务器端口设置ok!","服务器端口设置">; } }}<2>发送消息功能模块主要代码:voidCBCServerDlg::OnOK<>{ //TODO:Addextravalidationhere if<!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:Addextracleanuphere if<m_pSocket>{deletem_pSocket;}m_SocketList.RemoveAll<>;CDialog::OnCancel<>; CDialog::OnCancel<>;}其中有个与用户连接是否成功的判断提示代码为:voidCBCServerDlg::OnOK<>{ //TODO:Addextravalidationhere if<!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: CBCServerDlg<CWnd*pParent=NULL>; //standardconstructor voidGetSocketMsg<CClientSocket*pSocket>; CPtrListm_SocketList; CListenSocket*m_pSocket; //DialogData //{{AFX_DATA<CBCServerDlg> enum{IDD=IDD_BCServer_DIALOG}; CString m_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_MSG DECLARE_MESSAGE_MAP<>};程序运行开始时,先初始化服务器端程序主要代码是:BOOLCBCServerDlg::OnInitDialog<>{ CDialog::OnInitDialog<>; //Add"About..."menuitemtosystemmenu. //IDM_ABOUTBOXmustbeinthesystemcommandrange. ASSERT<<IDM_ABOUTBOX&0xFFF0>==IDM_ABOUTBOX>; ASSERT<IDM_ABOUTBOX<0xF000>; 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'smainwindowisnotadialog SetIcon<m_hIcon,TRUE>; //Setbigicon SetIcon<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>; }}classCClientUseSocket:publicCSocket{//Attributespublic://Operationspublic: CClientUseSocket<>; virtual~CClientUseSocket<>;//Overridespublic: //ClassWizardgeneratedvirtualfunctionoverrides //{{AFX_VIRTUAL<CClientUseSocket> public: virtualvoidOnReceive<intnErrorCode>; //}}AFX_VIRTUAL //Generatedmessagemapfunctions //{{AFX_MSG<CClientUseSocket> //NOTE-theClassWizardwilladdandremovememberfunctionshere. //}}AFX_MSG//Implementationprotected:};用户端程序主要有2个功能模块。连接服务器,点击后,会弹出一个输入服务器IP地址,和服务器端号。主要代码为:voidCUseSocketDlg::OnConnect<>{ //TODO:Addyourcontrolnotificationhandlercodehere CConnectDlgdlg; if<dlg.DoModal<>==IDOK> { m_ServerName=dlg.m_ServerName; m_PortAddress=dlg.m_PortAddress; m_pSocket=newCClientUseSocket<>; if<!<ConnectServer<m_pSocket>>> { m_pSocket=NULL; return; } else { MessageBox<"Socket连接成功!","userprogram">; }}}voidCUseSocketDlg::OnDisconnect<>{ //TODO:Addyourcontrolnotificationhandlercodehere if<m_pSocket> { deletem_pSocket; m_pSocket=NULL; MessageBox<"Socket连接已经断开","提示">; } else MessageBox<"当前未连接到任何服务器!","提示">;}voidCUseSocketDlg::OnConceal<>{ //TODO:Addyourcontrolnotificationhandlercodehere if<m_pSocket> { deletem_pSocket; } CDialog::OnCancel<>;}classCUseSocketApp:publicCWinApp{public: CUseSocketApp<>;//Overrides //ClassWizardgeneratedvirtualfunctionoverrides //{{AFX_VIRTUAL<CUseSocketApp> public: virtualBOOLInitInstance<>; //}}AFX_VIRTUAL//Implementation //{{AFX_MSG<CUseSocketApp> //NOTE-theClassWizardwilladdandremovememberfunctionshere. //DONOTEDITwhatyouseeintheseblocksofgeneratedcode! //}}AFX_MSG DECLARE_MESSAGE_MAP<>};voidCUseSocketDlg::GetSocketMsg<CClientUseSocket*pSocket>{ BOOLMsgEnd=false; CStringMsg="收到服务器消息:"; charMsgBuf[100]; intbufsize=100; do { strcpy<MsgBuf,"">; intleft=pSocket->Receive<MsgBuf,bufsize>; if<left<100&&left>0> MsgEnd=true; MsgBuf[left]=0; Msg+=MsgBuf; } while<!MsgEnd>; MessageBox<Msg,"userprogram">;}BOOLCUseSocketDlg::ConnectServer<CClientUseSocket*pSocket>{ if<!<pSocket->Create<>>> { deletepSocket; pSocket=NULL; MessageBox<"socket创建不成功","提示">; returnfalse; } if<!<pSocket->Connect<m_ServerName,m_PortAddress>>> { deletepSocket; pSocket=NULL; MessageBox<"服务器连接失败","提示">; returnfalse; } returntrue;}用户端程序另一个功能模块是断开连接,主要代码是:voidCUseSocketDlg::OnDisconnect<>{ //TODO:Addyourcontrolnotificationhandlercodehere if<m_pSocket> { deletem_pSocket; m_pSocket=NULL; MessageBox<"Socket连接已经断开","提示">; } else MessageBox<"当前未连接到任何服务器!","提示">;}classCConnectDlg:publicCDialog{//Constructionpublic: CConnectDlg<CWnd*pParent=NULL>;//standardconstructor//DialogData //{{AFX_DATA<CConnectDlg> enum{IDD=IDD_DIALOG1}; UINT m_PortAddress; CString m_ServerName; //}}AFX_DATA//Overrides //ClassWizardgeneratedvirtualfunctionoverrides //{{AFX_VIRTUAL<CConnectDlg> protected: virtualvoidDoDataExchange<CD

温馨提示

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

评论

0/150

提交评论