




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、程序设计实践设计报告课题名称:_聊天程序_学生姓名:_徐东玲_班 级:_2014211108_学 号:_2014210227_班内序号:_26_日 期:_2016/06/07_1 课题概述1.1课题目标和主要内容聊天程序虽然形态各异,但就其本质,却是相同的。这种程序一般由两大部分组成:服务器端聊天程序和客户端聊天程序。服务器端聊天程序负责接收来自客户端的聊天信息,并且根据客户端的要求把这些信息转发到另外一个活多个客户中。客户端聊天程序则负责建立与维护与服务器端的连接,向服务器发送客户的聊天内容,同时从服务器接收对方的响应。1.2系统的主要功能(1)可以手动输入服务器IP地址和端口号进行连接(客
2、户端功能)。(2)可以手动建立服务器接受其他客户端的连接要求(服务端功能)。(3)可以发送消息给服务端,显示服务端传来消息(客户端功能)。(4)可以接收客户端发送的消息,并将消息传给所有在线的客户端(服务端功能)。(5)可以自动回复(客户端)。2. 系统设计2.1 系统总体框架2.2 系统详细设计服务端:1 模块划分图及描述(1)在特定的端口上等待来自聊天客户的连接请求,并且需要维护一个客户连接表,以记录所有成功的连接。(2)及时接收各个聊天客户发送过来的信息,然后把这些信息转发到一个或多个客户连接。(3)监控这些连接的状态,在客户主动离开或发生故障时从列表中删除相应的表项,并及时更新连接表。
3、2 类关系图及描述CServerSocket类的主要功能是实现OnAccept()消息,负责监听服务端口,是一个服务Socket。此类头文件代码如下:/ CServerSocket command targetclass CChatDlg;class CServerSocket : public CSocket/ Attributespublic:CChatDlg * m_dlg;UINT m_uPort;BOOL Init(UINT port, CChatDlg* dlg);/ Operationspublic:CServerSocket();virtual CServerSocket();
4、/ Overridespublic:/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CServerSocket)/使用类向导添加的public:virtual void OnAccept(int nErrorCode);/AFX_VIRTUAL/ Generated message map functions/AFX_MSG(CServerSocket)/ Implementationprotected:;/AFX_INSERT_LOCATION/ Microsoft Visual C+ will additiona
5、l declarations immediately before the previous line.#endif/ !defined(AFX_SERVERSOCKET_H_03952A19_3B2C_45BD_B9BB_FBBD072ED603_INCLUDED_)3 存储结构、内存分配此模块用到了列表的存储结构客户端:1 模块划分图及描述(1)建立和维护与服务器的连接,并且随时监测连接的状态。(2)把用户输入的信息及时发送到服务端,同时,随时准备好接收服务端的信息,并将它显示出来。(3)在用户退出聊天过程时要关闭与服务端的连接。2 类关系图及描述CClientSocket类通过相应的On
6、Receive消息来接受数据,响应OnClose消息来断开对话的处理。CClientSocket类实现了以CArchive对数据进行的串行化。本类的头文件源代码如下:#include "PackMessg.h"targetclass CChatDlg;class CClientSocket : public CSocket/ Attributespublic:CArchive* m_aSessionIn;CArchive* m_aSessionOut;CSocketFile* m_sfSocketFile;CChatDlg * m_dlg;bool m_bInit; /作为
7、套接字是否被初始化的标记bool m_bClose; /作为套接字是否被关闭的标记/ Operationspublic:void Init(CChatDlg * dlg);BOOL SendMessage(CPackMessg * msg);void CloseSocket();public:static int GetLocalHostName(CString &sHostName);static int GetIpAddress(const CString &sHostName, BYTE &f0,BYTE &f1,BYTE &f2,BYTE &am
8、p;f3);/获得本地IPstatic CString ErrorReason(int tag);public:CClientSocket();virtual CClientSocket();/ Overridespublic:/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CClientSocket)/通过classwizard添加到类中的成员函数public:virtual void OnReceive(int nErrorCode);virtual void OnClose(int nErrorCode);/A
9、FX_VIRTUAL/ Generated message map functions/AFX_MSG(CClientSocket)/ Implementationprotected:;previous line.#endif/ !defined(AFX_CLIENTSOCKET_H_9A3B7A03_0D59_4A60_ABA2_35D6CA850937_INCLUDED_)2.3 关键算法分析算法1:CServerSocket:Init1 算法功能初始化服务端2 算法基本思想服务端建立套接字,并且进入监听状态。3 算法空间、时间复杂度分析O(1)4 代码逻辑(可用伪代码描述)BOOL CS
10、erverSocket:Init(UINT port, CChatDlg* dlg)m_uPort=port;m_dlg=dlg;if(Create(m_uPort)=FALSE)if(this->Listen()=FALSE)m_dlg->SetDlgItemText(IDC_SHOWMESSAGE,"服务器创建成功!");return TRUE; AfxMessageBox("服务器监听错误!"); return FALSE; AfxMessageBox("服务器套接字创建失败!"); return FALSE;算法2
11、:CClientSocket:OnReceive1 算法功能接收数据2 算法基本思想如果为客户端,将此响应传递到所有与此连接的客户端,如果为客户端,接收响应。3 算法空间、时间复杂度分析O(n)、O(1)4 代码逻辑(可用伪代码描述)void CClientSocket:OnReceive(int nErrorCode)/ TODO: Add your specialized code here and/or call the base classCSocket:OnReceive(nErrorCode);dowhile (!m_aSessionIn->IsBufferEmpty();
12、CPackMessg temp; temp.Serialize(*m_aSessionIn);m_dlg->m_sMsgList+=temp.m_strText+"rn" m_dlg->SetDlgItemText(IDC_SHOWMESSAGE,m_dlg->m_sMsgList); int linenum=(CEdit (CEdit *)(m_dlg->GetDlgItem(IDC_SHOWMESSAGE)->LineScroll(linenum); if(!m_dlg->m_bClient) for(POSITION CClient
13、Socket*t=if(t->m_hSocket!=this->m_hSocket)t->SendMessage(&temp); (m_dlg->GetDlgItem(IDC_SHOWMESSAGE)->GetLineCount(); pos=m_dlg->m_connectionList.GetHeadPosition();pos!=NULL;) (CClientSocket*)m_dlg->m_connectionList.GetNext(pos);算法3:CClientSocket:SendMessage1 算法功能发送消息2 算法基本思
14、想检查连接情况,若断开,关闭对话,若连接,发送消息。3 算法空间、时间复杂度分析O(1)4 代码逻辑(可用伪代码描述)BOOL CClientSocket:SendMessage(CPackMessg * msg) if (m_aSessionOut != NULL)else /对方关闭了连接 m_bClose=true; CloseSocket(); m_dlg->CloseSessionSocket(); return FALSE; msg->Serialize(*m_aSessionOut); m_aSessionOut->Flush(); return TRUE;算法
15、4:CChatClientDlg:OnPaint()1算法功能添加背景图2算法基本思想更换背景,使对话框更美观。3算法时间、空间复杂度分析O(1)4代码逻辑GetClientRect(&rect);/ 获取客户区 /dc.FillSolidRect(&rect, RGB(0,255,0); / 填充客户区颜色 /CDialog:OnPaint();CDC dcMem; dcMem.CreateCompatibleDC(&dc); CBitmap bmpBackground; bmpBackground.LoadBitmap(IDB_BITMAP1); /IDB_BITM
16、AP是你自己的图对应的ID BITMAP bitmap; bmpBackground.GetBitmap(&bitmap); CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground);dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY); dcMem.SelectObject(pbmpOld);CDialog:OnPaint();算法5:CChatClientDlg:OnBnClicked
17、Auto()1算法功能自动回复2算法基本思想若点击“自动回复”按钮,则在收到服务端的消息时会自动回复消息3算法的空间、时间复杂度O(1)4代码逻辑void CChatClientDlg:OnBnClickedAuto() check = !check;if (check)CString temp1 = "我:"CString formatbuff = "自动回复你好,主人不在,稍后回复您!"CString str;str = dlg->m_tm.Format("%X ");temp1 = str + temp1;temp1 +=
18、 formatbuff;(*dlg).m_client->Send(formatbuff, 200, 0);dlg->m_list.AddString(temp1);3. 程序运行结果分析可以接收、发送消息,还可以自动回复以及更新时间,并记录历史消息,总体来看,运行结果达到了预期的效果。4. 总结4.1课题的难点和关键点本课题的关键点在于对Sockets的理解和运用。Sockets是Windows网络编程的规范,Windows Sockets是Windows下得到广泛应用的、开放的、支持多种协议的网络编程接口。 本课题采用的是客户机/服务器模型,此模型工作时要求有一套为客户机和服务器所共识的惯例来保证服务能够被提供(或被接受)。这一套惯例包含了一套协议。它必须在通讯的两头都被实现。根据不同的实际情况,协议可能是对称的或是非对称的。在对称的协议中,每一方都有可能扮演主从角色;在非对称协议中,一方被不可改变地认为是主机,而另一方则是从机。一个对称协议的例子是Internet中用于终端仿真的TELNET。而非对称协议的例子是Internet中的FTP。无论具体的协议是对称的或是非对称的,当服务被提供时必然存在"客户进程"和"
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 石油批发行业竞争分析考核试卷
- 篷布产业节能减排考核试卷
- 电气设备客户满意度提升考核试卷
- 畜牧业供应链管理与优化考核试卷
- 渔业产品营销渠道开发考试考核试卷
- 护生培训护理安全教育
- 城轨类说课课件
- 2025塑料制品买卖合同模板
- 2025《瑞达地产劳动合同》
- 2025室内墙面涂料施工合同范本2
- 森林管护员面试题及答案
- 2025年高级考评员职业技能等级认定考试题(附答案)
- 培训课件:混凝土结构的施工技术(浇筑、养护)
- “中华传统文化经典研习”任务群下先秦诸子散文教学策略研究
- 2025年高考语文模拟作文导写及点评:社会时钟
- 《护理信息系统》课件
- 单片机技术与应用知到智慧树章节测试课后答案2024年秋甘肃省农垦中等专业学校
- 施工现场平面布置与临时设施、临时道路布置方案
- 建筑施工大型机械设备安全使用与管理培训
- T-CNPPA 3027-2024 药品泡罩包装应用指南
- 山东省潍坊市2025届高考数学二模试卷含解析
评论
0/150
提交评论