第6章 传输应用编程:即时通讯聊天工具.pptVIP

第6章 传输应用编程:即时通讯聊天工具.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
4. 更新用户列表 系统内的在线用户收到服务器发来的广播通告后,实时更新自己的用户列表。当服务器发来“login”通知时,说明有新成员加入,客户端执行代码段 ④ : AddItemToListBox(string.Format(新用户{0}({1})加入, splitString[1], splitString[2])); string userItemInfo = splitString[1] + , + splitString[2]; AddItemToListView(userItemInfo); 若收到的是“logout”,则执行代码段 ⑤ : AddItemToListBox(string.Format(用户{0}({1})退出, splitString[1], splitString[2])); RmvItemfromListView(splitString[1]); 两个回调方法定义。 在线用户的即时聊天是本章软件最重要的核心功能,携带聊天谈话内容的消息以“talk”为首部,采用点对点(P2P)方式发给对方。“talk”消息的发送、接收和显示都由专门的聊天子窗口负责,当客户端主程序收到“talk”打头的消息时,先执行代码段 ⑥ : for (int i = 0; i chatFormList.Count; i++) { if (chatFormList[i].Text == splitString[2]) { chatFormList[i].ShowTalkInfo(splitString[2], splitString[1], splitString[3]); } } 聊天子窗体对象的实现代码在源文件ChatForm.cs中,其代码为。 要打开对应某个用户的子窗口,只须双击在线用户列表中的该用户项即可,其事件过程代码。 同时运行一个服务器(Server)程序和三个客户端(Client)程序,启动服务线程,在三个客户端分别以用户名(网名)“闲云孤鹤”、“堕落森林”和“小家伙”登录服务器,如图6.17所示。 例如,“闲云孤鹤”要与网友“堕落森林”聊天,双击“在线”列表中“堕落森林”项,系统弹出名为【堕落森林】的聊天子窗,如图6.18。 在网友“堕落森林”的客户端界面上,用同样的方法打开“闲云孤鹤”的聊天窗,接下来双方就可以在线交谈了,如图6.19。 为了让读者对这个即时通讯聊天软件的全部实现细节有个完整了解,同时也便于读者自己动手实现这个程序,现列出源代码清单如下: 服务器端。 6.1 即时通讯系统 6.2 传输层的技术 6.3 原理、流程与协议设计 6.4 系统实现 6.5 源代码清单 6.1.1 生活中的即时通讯 大家经常接触到的有:腾讯QQ、淘宝的阿里旺旺、百度Hi、飞鸽传书以及国外的MSN、Skype等等(见图6.2)。 曾提到还有另一种混合型P2P,它需要索引服务器协调才能正常工作(如图6.3)。 6.2.1 同步与异步TCP 同步TCP实现机制简单、编程方便、代码的可读性好,唯一的缺点是:通信的一方往往不得不为了等待对方做出响应而阻塞线程,降低了程序执行的并发程度。异步TCP能很好地达到并行执行的效果,缺点是要运用特殊的实现机制,编程难度较高。 要创建匿名UDP的套接字对象,使用UdpClient类的这个构造函数: public UdpClient(int port) 用此构造函数创建一个基础socket,系统自动分配合适的本地IPv4地址,将port参数指定为0,表示让系统自动为其分配一个合适的端口号。 典型应用代码如下: UdpClient sendUdpClient = new UdpClient(0); byte[] sendbytes = Encoding.Unicode.GetBytes(message); IPEndPoint remoteIPEndPoint = … sendUdpClient.Send(sendbytes, sendbytes.Length, remoteIPEndPoint); sendUdpClient.Close(); 要创建实名UDP套接字对象,使用下面的构造函数: public UdpClient(IPEndPoint localEdp) 用此构造函数创建一个新的UdpClient实例,该实例与包含本地IP地址和端口号的IPEndPoint实例绑定。 典型的应用代码为: //创建实名套接字 IPAddress localIp = IPAddress.Parse(textBoxLocalIp.Text); localIPEndPoint = new IPEndPoint(localIp, int.

文档评论(0)

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

1亿VIP精品文档

相关文档