互联网即时聊天工具是如何实现的?

互联网即时聊天工具是如何实现的?,第1张

如下:
该软件采用P2P方式,各个客户端之间直接发消息进行会话聊天,服务器在其中只扮演协调者的角色(混合型P2P)。
1会话流程设计
当一个新用户通过自己的客户端登陆系统后,从服务器获取当前在线的用户信息列表,列表信息包括了系统中每个用户的地址。用户就可以开始独立工作,自主地向其他用户发送消息,而不经过服务器。每当有新用户加入或在线用户退出时,服务器都会及时发消息通知系统中的所有其他用户,以便它们实时地更新用户信息列表。
按照上述思路,设计系统会话流程如下:
(1)用户通过客户端进入系统,向服务器发出消息,请求登陆。
(2)服务器收到请求后,向客户端返回应答消息,表示同意接受该用户加入,并顺带将自己服务线程所在的监听端口号告诉用户。
(3)客户端按照服务器应答中给出的端口号与服务器建立稳定的连接。
(4)服务器通过该连接将当前在线用户的列表信息传给新加入的客户端。
(5)客户端获得了在线用户列表,就可以独立自主地与在线的其他用户通信了。
(6)当用户退出系统时要及时地通知服务器。
2用户管理
系统中,无论是服务器还是客户端都保存一份在线用户列表,客户端的用户表在一开始登陆时从服务器索取获得。在程序运行的过程中,服务器负责实时地将系统内用户的变动情况及时地通知在线的每个成员用户。
新用户登录时,服务器将用户表传给他,同时向系统内每个成员广播“login”消息,各成员收到后更新自己的用户表。
同样,在有用户退出系统时,服务器也会及时地将这一消息传给各个用户,当然这也就要求每个用户在自己想要退出之前,必须要先告诉服务器。
3协议设计
31客户端与服务器会话
(1)登陆过程。
客户端用匿名UDP向服务器发送消息:
login,username,localIPEndPoint
消息内容包括3个字段,各字段之间用“,”分隔:“login”表示请求登陆;“username”为用户名;“localIPEndPoint”是客户端本地地址。
服务器收到后以匿名UDP返回如下消息:
Accept,port
其中,“Accept”表示服务器接受了请求;“port”是服务所在端口,服务线程在这个端口上监听可能的客户连接,该连接使用同步的TCP。
连上服务器,获取用户列表:
客户端从上一会话的“port”字段的值服务所在端口,于是向端口发起TCP连接,向服务器索取在线的用户列表,服务器接受连接后将用户列别传输给客户端。
用户列表格式如下:
username1,IPEndPoint1;username2,IPEndPoint2;;end
username1,username2为用户名,IPEndPoint1,IPEndPoint2为它们对应的端点。每个用户的信息都有个“用户名+端点”组成,用户信息之间以“;”隔开,整个用户列表以“end”结尾。
31服务器协调管理用户
(1)新用户加入通知。
由于系统中已存在的每个用户都有一份当前用户表,因此当有新成员加入时,服务器无需重复给系统中的每个成员再传送用户表,只要将新加入成员的信息告诉系统内的其他用户,再由他们各自更新自己的用户表就行了。
服务器向系统内用户广播发送如下消息:
端点字段写为“remoteIPEndPoint”,表示是远程某个用户终端登陆了,本地客户线程据此更新用户列表。其实,在这个过程中,服务器只是将受到的“login”消息简单地转发而已。
(2)用户退出。
与新成员加入时一样,服务器将用户退出的消息直接进行广播转发:
logout,username,remoteIPEndPoint
其中,“remoteIPEndPoint”为退出系统的远程用户终端的端点地址。
31用户终端之间聊天
用户聊天时,他们各自的客户端之间是以P2P方式工作的,彼此地位对等,独立,不与服务器发生直接联系。
4系统实现
41服务线程
系统运行后,先有服务器启动服务线程,只需单击“启动”按钮即可。
即时聊天软件可以在两名或多名用户之间传递即时消息的网络软件,大部分的即时聊天软件都可以显示联络人名单,并能显示联络人是否在线。使用者发出的每一句话都回即时显示在双方的萤幕上。

所谓的服务器端程序,客户端程序也是相对应的概念,有时在一个程序中既有服务端又有客户端功能 QQ聊天程序分成了两个程序,一个安装在腾讯公司的服务器上
,我们称之为服务端程序,一个安装在QQ用户的计算机上,我们称之为客户端程序 在许多介绍网络通讯编程的书籍中有关网络聊天的例子,当一个客户要和第二个客户发送数据
时,先把数据发送给服务器,然后服务器再把聊天数据发送给第二个客户,服务器好像是一个中转站,这在客户数量比较少时,服务器还能承受,在客户数量较多时,服务器端
肯定要瘫痪何况客户之间还要传送文件,语音聊天,视频聊天等等,为了减少服务器端的压力,各客户端之间需要直接通信
1在服务端和客户端之间(一对多)
用于客户端程序登陆,验证用户名密码,获取其他在线好友信息等等
2在客户端和客户端之间(多对多)
用于好友间直接通信聊天,此时每个客户端程序上既有实现服务端功能的部分,又有实现客户端功能的部分,前者用于接受聊天数据,后者用于发送聊天数据
在用C/S模式进行通信时,作为客户端在请求与服务器端连接时需要知道服务端的IP地址,腾讯公司的服务器具有固定的公网地址,这没有问题 但是在客户端和
客户端之间通讯时,每个用户的IP地址都是ISP所给的临时地址 无法固定,那么用户要与另外一个用户连接时,怎么知道对方的IP地址呢当一个用户连接到Internet后,
获得临时的公网地址,当登陆到QQ时,QQ服务器端会获得该上线用户的IP地址,然后告知其他要与该上线用户聊天的用户,其他用户就可以连接到该用户与之直接通信了


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/12815616.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-28
下一篇2025-08-28

发表评论

登录后才能评论

评论列表(0条)

    保存