网站大量收购独家精品文档,联系QQ:2885784924

p2p即时聊天系统.doc

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
p2p即时聊天系统

课程设计题目 基于P2P的局域网即时通信系统 实验环境及工具 计算机:PC机,PC虚拟机, 操作系统:Windows2000,WindowsXP 程序设计语言: VC 6.0 设计要求 实现一个图形用户界面局域网内的消息系统。 功能:建立一个局域网内的简单的P2P消息系统,程序既是服务器又是客户,服务器端口使用3333。 用户注册及对等方列表的获取:对等方A启动后,用户设置自己的信息(用户名,所在组);扫描网段中在线的对等方(3333端口打开),向所有在线对等方的服务端口发送消息,接收方接收到消息后,把对等方A加入到自己的用户列表中,并发应答消息;对等方A把回应消息的其它对等方加入用户列表。双方交换的消息格式自己根据需要定义,至少包括用户名、IP地址。 发送消息和文件:用户在列表中选择用户,与用户建立TCP连接,发送文件或消息。 用户界面:界面上包括对等方列表;消息显示列表;消息输入框;文件传输进程显示及操作按钮或菜单。 设计内容与步骤; 课程设计任务说明书‘1’-‘9’,消息格式分配如下: ‘1’+本机名:登陆,发送给所有在线对等方的服务端口 ‘2’+本机名:对登陆消息的回馈 ‘3’+本机名:退出 ‘4’+本机名:对话请求 “51”或”52”:对话请求的回应(是否同意) ‘6’+本机名+”退出对话”:退出对话 ‘7’+对话内容:对话 ‘8’+文件名长度+文件名+文件长度(转换成CString):请求传送 “91”同意传输 “92”拒绝 “93”磁盘已满 该软件分别开了3个监听端口:3333、3334、3335。之所以分开3个端口是因为各种传送的不同,在设计实验的过程中我发现对于登陆消息,退出消息,应该用的socket是即用即断,即比如我收到登陆消息,并发送回馈消息后就断开连接,这样就不用一个用户同时连接很多用户,如果用完不断,就是全连接了。而文件传输应该跟对话传输分开,因此应该再开一个端口。 在线用户的扫描: 本软件是通过扫描局域网内的在线用户(不一定打开软件),然后一一发送登陆信息,如果收到登陆信息就在列表上增加用户并发送回馈,如果收到回馈就在列表上增加用户,如果收到退出消息就删除用户。 文件传输 原本打算使用多线程文件传输,及发送端开多个线程同时读一个文件并发送,接收端在磁盘开辟一个与接收文件大小一致的一个文件,然后接收端开多个线程接收并各自负责写进特定文件位置,不过由于Socket匹配问题,因此还是使用单线程传输比较简单一点。 方案实现及主要程序 工程中的类 本软件中分别有三个CAsyncSocket的派生类,分别是CCtrlSocket,CTalkSocket,CFileSocket CCtrlSocket:用于接收及发送控制信息,包括文件头为‘1’(登陆); ‘2’(回馈);‘3’(退出); ‘4’(对话请求);’5’(对话请求的回应)的消息,对应监听端口是CTRLPORT——3333 CTalkSocket:用于接收及发送对话信息,及部分文件控制信息。包括文件头为‘6’(退出对话); ‘7’(对话); ‘8’(请求传送); ‘9’(传送回应)的消息,对应监听端口是TALKPORT——3334 CFileSocket:用于发送及接收文件,对应监听端口是FILEPORT——3335 其它类如CPathDialog,CFileDlg与本设计的主要部分无紧要联系,故不一一说明了 类的具体实现 CCtrlSocket类:主要部分有FD_READ及 FD_CONNECT触发的事件,OnConnect在建立连接后发送出相应的消息,而OnReceive在有消息到来的情况下处理消息 void CCtrlSocket::OnReceive(int nErrorCode) { // TODO: Add your specialized code here and/or call the base class char q[50]; char t; unsigned int j; CString tempaddr; CString Ctemp; UINT tempport; this-Receive(q,strlen(q)+1,0); t=q[0]; for(j=0;jstrlen(q);j++) { q[j]=q[j+1]; } CChatApp *pApp=(CChatApp *) AfxGetApp(); CChatDlg *pDlg = (CChatDlg *) pApp-m_pMainWnd; pDlg-UpdateData(true); switch(t)//对控制信息的判断 { case 1://登陆 pDlg-m_listonline.InsertItem(0,q);

文档评论(0)

yaocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档