- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C# 网络编程系列]专题九:实现类似QQ的即时通信程序
转载
引言:
前面专题中介绍了UDP、TCP和P2P编程,并且通过一些小的示例来让大家更好的理解它们的工作原理以及怎样.Net类库去实现它们的。为了让大家更好的理解我们平常中常见的软件QQ的工作原理,所以在本专题中将利用前面专题介绍的知识来实现一个类似QQ的聊天程序。
一、即时通信系统
在我们的生活中经常使用即时通信的软件,我们经常接触到的有:QQ、阿里旺旺、MSN等等。这些都是属于即时通信(Instant Messenger,IM)软件,IM是指所有能够即时发送和接收互联网消息的软件。
在前面专题P2P编程中介绍过P2P系统分两种类型——单纯型P2P和混合型P2P(QQ就是属于混合型的应用),混合型P2P系统中的服务器(也叫索引服务器)起到协调的作用。在文件共享类应用中,如果采用混合型P2P技术的话,索引服务器就保存着文件信息,这样就可能会造成版权的问题,然而在即时通信类的软件中, 因为客户端传递的都是简单的聊天文本而不是网络媒体资源,这样就不存在版权问题了,在这种情况下,就可以采用混合型P2P技术来实现我们的即时通信软件。前面已经讲了,腾讯的QQ就是属于混合型P2P的软件。
因此本专题要实现一个类似QQ的聊天程序,其中用到的P2P技术是属于混合型P2P,而不是前一专题中的采用的单纯型P2P技术,同时本程序的实现也会用到TCP、UDP编程技术。具体的相关内容大家可以查看本系列的相关专题的。
二、程序实现的详细设计
本程序采用P2P方式,各个客户端之间直接发消息进行聊天,服务器在其中只是起到协调的作用,下面先理清下程序的流程:
2.1 程序流程设计
当一个新用户通过客户端登陆系统后,从服务器获取当在线的用户信息列表,列表信息包括系统中每个用户的地址,然后用户就可以单独向其他发消息。如果有用户加入或者在线用户退出时,服务器就会及时发消息通知系统中的所有其他客户端,达到它们即时地更新用户信息列表。
根据上面大致的描述,我们可以把系统的流程分为下面几步来更好的理解(大家可以参考QQ程序将会更好的理解本程序的流程):
用户通过客户端进入系统,向服务器发出消息,请求登陆
服务器收到请求后,向客户端返回回应消息,表示同意接受该用户加入,并把自己(指的是服务器)所在监听的端口发送给客户端
客户端根据服务器发送过来的端口号和服务器建立连接
服务器通过该连接 把在线用户的列表信息发送给新加入的客户端。
客户端获得了在线用户列表后就可以自己选择在线用户聊天。(程序中另外设计一个类似QQ的聊天窗口来进行聊天)
当用户退出系统时也要及时通知服务器,服务器再把这个消息转发给每个在线的用户,使客户端及时更新本地的用户信息列表。
2.2 通信协议设计
所谓协议就是约定,即服务器和客户端之间会话信息的内容格式进行约定,使双方都可以识别,达到更好的通信。
下面就具体介绍下协议的设计:
1. 客户端和服务器之间的对话
(1)登陆过程
① 客户端用匿名UDP的方式向服务器发出下面的信息:
login, username, localIPEndPoint
消息内容包括三个字段,每个字段用 “,”分割,login表示的是请求登陆;username表示用户名;localIPEndPint表示客户端本地地址。
② 服务器收到后以匿名UDP返回下面的回应:
Accept, port
其中Accept表示服务器接受请求,port表示服务器所在的端口号,服务器监听着这个端口的客户端连接
③ 连接服务器,获取用户列表
客户端从上一步获得了端口号,然后向该端口发起TCP连接,向服务器索取在线用户列表,服务器接受连接后将用户列表传输到客户端。用户列表信息格式如下:
username1,IPEndPoint1;username2,IPEndPoint2;...;end
username1、username2表示用户名,IPEndPoint1,IPEndPoint2表示对应的端点,每个用户信息都是由用户名+端点组成,用户信息以“;”隔开,整个用户列表以“end”结尾。
(2)注销过程
用户退出时,向服务器发送如下消息:
logout,username,localIPEndPoint
这条消息看字面意思大家都知道就是告诉服务器 username+localIPEndPoint这个用户要退出了。
2. 服务器管理用户
(1)新用户加入通知
因为系统中在线的每个用户都有一份当前在线用户表,因此当有新用户登录时,服务器不需要重复地给系统中的每个用户再发送所有用户信息,只需要将新加入用户的信息通知其他用户,其他用户再更新自己的用户列表。
您可能关注的文档
最近下载
- 中小学校内部控制手册.pdf VIP
- Hilti喜利得防火胶泥材料安全数据表 CFS-P BA CP 618 CFS-D 1'' (ZH), 说明书用户手册.pdf
- 《园艺设施工程学》第1章园艺设施的发展现状与趋势.ppt
- 《拒绝校园欺凌》ppt课件(图文).pptx VIP
- 知识产权常年财务顾问合同.docx VIP
- 犯罪原因分析_性犯罪_强奸罪.pptx VIP
- SY∕T 5665-2018 钻井液用防塌封堵剂 改性沥青.pdf
- 儿童护牙知识课件.pptx VIP
- T CAAMTB 68—2022 自调整膜片弹簧离合器总成技术要求和台架试验方法.pdf VIP
- 地方院校药学专业应用型人才创新能力培养体系的构建.pdf VIP
文档评论(0)