计算机网络课程设计双机通信“聊天热线”的制作设计

上传人:沈*** 文档编号:80195502 上传时间:2022-04-25 格式:DOC 页数:13 大小:141.50KB
收藏 版权申诉 举报 下载
计算机网络课程设计双机通信“聊天热线”的制作设计_第1页
第1页 / 共13页
计算机网络课程设计双机通信“聊天热线”的制作设计_第2页
第2页 / 共13页
计算机网络课程设计双机通信“聊天热线”的制作设计_第3页
第3页 / 共13页
资源描述:

《计算机网络课程设计双机通信“聊天热线”的制作设计》由会员分享,可在线阅读,更多相关《计算机网络课程设计双机通信“聊天热线”的制作设计(13页珍藏版)》请在装配图网上搜索。

1、计算机网络课程设计 目录1需求分析 21.1开发环境21.2功能要求213功能实现 22总体设计 32.1软件的运行环境设计 32.2客户端设计 32.3服务器端设计 43详细设计与系统实现 43.1客户端的实现 43.2服务器端的实现 84软件测试与性能分析 114.1软件测试 114.2性能分析 125设计总结126参考文献13“聊天热线”的制作 -网络通信软件设计报告1. 需求分析1.1 开发背景随着数据通信技术的发展特别是计算机技术的发展,网络已成为信息传播的重要渠道,在很多C/S软件中,都提供了在线交流的功能,类似QQ、UC、网络聊天室一类的聊天系统的发展日新月异。因此,制作了一个网

2、络“聊天热线”,通过制作该软件更好的学习网络编程原理和实现技术。1.2 功能要求客户端需要完成的功能:(1)通过IP地址和端口号请求与服务器连接。(2)可以向服务器发送消息。(3)如果服务器端断开,在列表中给出响应提示。(4)可以清空和保存历史聊天记录。(5)可以查看版本信息。(6)文件传输。服务器端需要完成的功能:(1)打开本地端口,并对其进行监控。(2)当接收到连接请求时打开与客户端的连接,并将连接的信息显示在列表中。(3)当接收到客户端发来的消息时将其显示在列表中。(4)可以回复客户端。(5)可以清空和保存历史聊天记录。(6)可以查看版本信息。(7)当接收到客户端关闭请求时,断开与客户端

3、的连接。(8)文件传输。1.3 功能实现考虑到通信软件制作的复杂性和课程设计的时间问题,设计的“聊天热线”主要实现了以下功能:客户端实现的功能:(1)通过IP地址和端口号与服务器连接验证成功。(2)向服务器发送消息验证功能。(3)服务器端断开,在列表中给出响应提示。(4)清空和保存历史聊天记录验证功能。(5)查看版本信息。服务器端实现的功能:(1)打开并监控本地端口。(2)与客户端连接的信息显示在列表中验证功能。(3)客户端发来的消息显示在列表中验证功能。(4)回复客户端。(5)清空和保存历史聊天记录。(6)查看版本信息。(7)接受到客户端关闭请求,断开与客户端的连接。2总体设计设计思想:为实

4、现网络聊天的功能,采用Windows Socket编程。在设计聊天方案时,客户端通过IP地址和端口号与服务器端连接,服务器端监听到连接请求,进行响应;建立连接之后客户端将信息发往服务器端,再由服务器端进行分别处理。客户端和服务器端都实现清空和保存历史聊天记录。“聊天热线”制作的总体设计包括:l 软件的运行环境设计l 客户端设计l 服务器端设计2.1 软件的运行环境设计为了保证系统运行的效率和可靠性,一般情况下,服务器端应具有较高的软硬件配置,客户端的要求不需要很高。此应用程序虽适用于Internet和内部局域网,但只是为了进一步学习网络编程知识,应用不够广泛,所以对软硬件配置不是太高。1. 软

5、件环境l 客户端:Windows 98,Microsoft Visual C+ 6.0以上版本l 服务器端:Windows 98/2000,Microsoft Visual C+ 6.0以上版本2. 硬件环境l 客户机:CPU要求200MMX以上,内存64MB以上l 服务器端:CPU要求200MMX以上,内存64MB以上2.2 客户端设计根据需求分析和功能要求,对客户端各个功能进行集中、分块,本软件客户端的功能模块图如图1所示。客户端通过IP地址和端口号请求与服务器连接客户端列表显示向服务器发送的消息清空和保存历史聊天记录服务器端断开, 客户端列表给出响应提示查看版本信息图1 客户端功能模块图

6、2.3 服务器端设计根据需求分析和功能要求,对服务器端各个功能进行集中、分块,本软件服务器端的功能模块图如图2所示。服务器端服务器端列表显示与客户端连接的信息服务器端列表显示客户端发来的消息清空和保存历史聊天记录服务器端回复客户端消息查看版本信息客户端关闭 ,服务器端列表显示断开信息打开本地端口并对其进行监控图2 服务器端功能模块图3. 详细设计与系统实现3.1 客户端的实现建立一个基于Dialogbased的MFC AppWizard项目,其中使用静态文本控件、按扭控件、IP地址控件、编辑控件、组控件、和列表控件等各种常用控件,以及通过Socket进行网络通信编程。1. 从CAsyncSoc

7、ket派生出类CClientSocket,其头文件如下:class CClientSocket : public CAsyncSocket/ Attributespublic:/ Operationspublic:CClientSocket();virtual CClientSocket();/ Overridespublic:/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CClientSocket)public:virtual void OnConnect(int nErrorCode);virtual void

8、 OnReceive(int nErrorCode);virtual void OnClose(int nErrorCode);/AFX_VIRTUAL/ Generated message map functions/AFX_MSG(CClientSocket)/ NOTE - the ClassWizard will add and remove member functions here./AFX_MSG/ Implementationprotected:;2. 类CClientSocket中重写三个成员函数:OnConnect、OnReceive、OnClose,代码如下:void C

9、ClientSocket:OnConnect(int nErrorCode) / TODO: Add your specialized code here and/or call the base classif(nErrorCode)AfxMessageBox(连接出现错误,请您重新连接!);return;AsyncSelect(FD_READ|FD_WRITE|FD_CLOSE);(CChatClientDlg*)(AfxGetApp()-m_pMainWnd)-ServerIP.EnableWindow(FALSE);(CChatClientDlg*)(AfxGetApp()-m_pMa

10、inWnd)-m_ButtonConnect.EnableWindow(FALSE);(CChatClientDlg*)(AfxGetApp()-m_pMainWnd)-m_ButtonSend.EnableWindow();(CChatClientDlg*)(AfxGetApp()-m_pMainWnd)-m_ListWords.AddString(连接上服务器端);(CChatClientDlg*)(AfxGetApp()-m_pMainWnd)-m_ListWords.SetTopIndex(CChatClientDlg*)(AfxGetApp()-m_pMainWnd)-m_ListW

11、ords.GetCount()-1);CAsyncSocket:OnConnect(nErrorCode);void CClientSocket:OnReceive(int nErrorCode) / TODO: Add your specialized code here and/or call the base classchar szTemp250;int n=Receive(szTemp,250);szTempn=0;CString sTemp;sTemp.Format(收到:%s,szTemp);(CChatClientDlg*)(AfxGetApp()-m_pMainWnd)-m_

12、ListWords.AddString(sTemp);(CChatClientDlg*)(AfxGetApp()-m_pMainWnd)-m_ListWords.SetTopIndex(CChatClientDlg*)(AfxGetApp()-m_pMainWnd)-m_ListWords.GetCount()-1);CAsyncSocket:OnReceive(nErrorCode);void CClientSocket:OnClose(int nErrorCode) / TODO: Add your specialized code here and/or call the base cl

13、ass(CChatClientDlg*)(AfxGetApp()-m_pMainWnd)-m_ListWords.AddString(服务器端已经断开);(CChatClientDlg*)(AfxGetApp()-m_pMainWnd)-m_ListWords.SetTopIndex(CChatClientDlg*)(AfxGetApp()-m_pMainWnd)-m_ListWords.GetCount()-1);(CChatClientDlg*)(AfxGetApp()-m_pMainWnd)-ServerIP.EnableWindow();(CChatClientDlg*)(AfxGet

14、App()-m_pMainWnd)-m_ButtonConnect.EnableWindow();(CChatClientDlg*)(AfxGetApp()-m_pMainWnd)-m_ButtonSend.EnableWindow(FALSE);Close();CAsyncSocket:OnClose(nErrorCode);3. 类CChatClientDlg中添加5个事件处理函数,代码如下:void CChatClientDlg:OnButtonConnect() / TODO: Add your control notification handler code hereBYTE nF

15、ild4;UpdateData(true);ServerIP.GetAddress(nFild0,nFild1,nFild2,nFild3);CString sIP;sIP.Format(%d.%d.%d.%d,nFild0,nFild1,nFild2,nFild3);m_ClientSocket.Create();m_ClientSocket.Connect(sIP,14875);void CChatClientDlg:OnButtonSend() / TODO: Add your control notification handler code hereUpdateData();m_Cl

16、ientSocket.Send(m_sWords,m_sWords.GetLength();m_ListWords.AddString(发送:+m_sWords);m_ListWords.SetTopIndex(m_ListWords.GetCount()-1); m_sWords=;UpdateData(false);void CChatClientDlg:OnButtonClear() / TODO: Add your control notification handler code herem_ListWords.ResetContent();void CChatClientDlg:O

17、nButtonSave() / TODO: Add your control notification handler code herechar szFilters=文本文件(*.txt)|*.txt|;CFileDialog FileDlg(FALSE,txt,ChatHistory.txt,OFN_HIDEREADONLY,szFilters,this);if(FileDlg.DoModal()=IDOK)CString sPathName=FileDlg.GetPathName();CFile HistoryFile;if(HistoryFile.Open(sPathName,CFil

18、e:modeCreate|CFile:modeWrite)char szTemp250;int n;for(int i=0;im_pMainWnd)-m_ServerSocket);/启用发送按扭(CChatServerDlg*)(AfxGetApp()-m_pMainWnd)-m_ButtonSend.EnableWindow();(CChatServerDlg*)(AfxGetApp()-m_pMainWnd)-m_ServerSocket.AsyncSelect(FD_READ|FD_WRITE|FD_CLOSE);(CChatServerDlg*)(AfxGetApp()-m_pMai

19、nWnd)-m_ListWords.AddString(接受客户端连接请求);(CChatServerDlg*)(AfxGetApp()-m_pMainWnd)-m_ListWords.SetTopIndex(CChatServerDlg*)(AfxGetApp()-m_pMainWnd)-m_ListWords.GetCount()-1);CAsyncSocket:OnAccept(nErrorCode); void CServerSocket:OnReceive(int nErrorCode) / TODO: Add your specialized code here and/or ca

20、ll the base classchar szTemp250;int n=Receive(szTemp,250);szTempn=0;CString sTemp;sTemp.Format(收到:%s,szTemp);(CChatServerDlg*)(AfxGetApp()-m_pMainWnd)-m_ListWords.AddString(sTemp);(CChatServerDlg*)(AfxGetApp()-m_pMainWnd)-m_ListWords.SetTopIndex(CChatServerDlg*)(AfxGetApp()-m_pMainWnd)-m_ListWords.G

21、etCount()-1);CAsyncSocket:OnReceive(nErrorCode);void CServerSocket:OnClose(int nErrorCode) / TODO: Add your specialized code here and/or call the base class(CChatServerDlg*)(AfxGetApp()-m_pMainWnd)-m_ListWords.AddString(客户端已经断开);(CChatServerDlg*)(AfxGetApp()-m_pMainWnd)-m_ListWords.SetTopIndex(CChat

22、ServerDlg*)(AfxGetApp()-m_pMainWnd)-m_ListWords.GetCount()-1);(CChatServerDlg*)(AfxGetApp()-m_pMainWnd)-m_ButtonSend.EnableWindow(FALSE);Close();CAsyncSocket:OnClose(nErrorCode);3. 类CChatServerDlg中添加4个事件处理函数,代码如下:void CChatServerDlg:OnButtonSend() / TODO: Add your control notification handler code h

23、ereUpdateData();m_ServerSocket.Send(m_sWords,m_sWords.GetLength();m_ListWords.AddString(发送:+m_sWords);m_ListWords.SetTopIndex(m_ListWords.GetCount()-1);m_sWords=;UpdateData(false);void CChatServerDlg:OnButtonClear() / TODO: Add your control notification handler code herem_ListWords.ResetContent();vo

24、id CChatServerDlg:OnButtonSave() / TODO: Add your control notification handler code herechar szFilters=文本文件(*.txt)|*.txt|;CFileDialog FileDlg(FALSE,txt,ChatHistory.txt,OFN_HIDEREADONLY,szFilters,this);if(FileDlg.DoModal()=IDOK)CString sPathName=FileDlg.GetPathName();CFile HistoryFile;if(HistoryFile.

25、Open(sPathName,CFile:modeCreate|CFile:modeWrite)char szTemp250;int n;for(int i=0;im_ListWords.GetCount();i+)n=m_ListWords.GetTextLen(i);m_ListWords.GetText(i,szTemp);szTempn=r;szTempn+1=n;HistoryFile.Write(szTemp,n+2);HistoryFile.Close();elseAfxMessageBox(无法打开文件:+sPathName);void CChatServerDlg:OnBut

26、tonAbout() / TODO: Add your control notification handler code hereCAboutDlg dlgAbout;dlgAbout.DoModal();4.在CChatServerDlg类的OnInitDialog()成员函数中添加如下代码:m_ServerSocket.Create(14875); /创建监听Socket,端口号为14875m_ServerSocket.Listen(1); /开始监听,只接受一个客户端程序运行结果如图4所示:图4 聊天热线服务器端4. 软件测试与性能分析4.1 软件测试本软件采取的测试方式是先进行模块测

27、试,经过修改和调整通过之后,进行总体测试,测试结果各项功能均已经或基本达到设计要求。如图5所示。采用的测试环境是:客户端和服务器端都采用Windows XP操作系统 + Microsoft Visual C+ 6.0。测试的主要内容包括:客户端通过IP地址和端口号请求与服务器端连接、连接信息在列表中显示、客户端发送消息和服务器端回复消息显示在列表中、清空和保存历史聊天记录、查看版本信息、客户端或服务器端任一方断开则在列表中给出提示。图54.2 性能分析主要问题及故障现象的分析:客户端向服务器端发送连接请求时,总是弹出图6窗口。当点击“忽略”按扭时,客户端可以连接上服务器端;若点击“终止”或者“

28、重试”按扭时,则自动将服务器端窗口关闭。一直不得其解。图65. 设计总结1. 程序的应改进之处l 使用注册、登录功能。l 实现多对多聊天。l 实现文件传输。l 使用非模态对话框代替模态对话框。l 设计漂亮、多元化的界面2. 个人小结由于之前没有接触过网络编程,这次课程设计是在边学习边实践的基础上完成的,做的结果不太好,和自己原来的设想有很大差距。虽然课程设计时间有限,但是我会在以后的时间里继续学习、实践,争取做出一个好的“聊天热线”。短短的两个星期,却让我学到了很多关于Socket网络编程的知识,同时,进一步掌握了软件设计的步骤和过程,最重要的是抓住了整个软件设计的灵魂软件工程思想。6. 参考文献1 龙马工作室. Visual C+ 6.0程序设计学与用教程. 北京:机械工业出版社,2003.4.2 赛奎春等. Visual C+工程应用与项目实践. 北京:机械工业出版社,2005.1.3 谢希仁. 计算机网络(第四版). 北京:电子工业出版社,2003.6.4 张海藩. 软件工程. 北京:人民邮电出版社,2002.3.第 13 页 共 13 页

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!