不
不困
Unregistered / Unconfirmed
GUEST, unregistred user!
OICQ使用UDP。
简化的流程:
1。用户启动客户端程序,客户端程序首先用本地数据校验密码,如通过,则转到3;
2。如本地校验失败,则询问用户是否要求交给服务器验证;
3。客户端程序向服务器端口8000发出登陆数据包,其中包括qq号、密码等信息;
4。服务器校验密码后向客户端的4000(也可能是其他端口,要视具体的bind情况而定)端口回送响应数据包,并发送好友列表(客户端在本地机器上也存有一份好友列表),其中包括在线好友的名单与IP、端口号;
5。与好友通话时,客户端程序首先试图向该好友的ip直接发送数据,若发送失败(例如网络状态不好、防火墙或好友不在线),则交给服务器转发(转发有可能造成丢包);
6。好友收到信息后,回送一个确认信号给发送端,结束一次通话。
注:由于UDP协议不是一个“可靠”协议,故意上的发送、响应的交互过程有可能不是一次完成的,会出现多次发送、多次响应的情况,但有效发送、响应只有一次。
客户端程序会不断地(间隔只有几秒钟)向服务器发出确认信息包,以确认当前的网络连接有效;服务器收到信息包后,更新好友列表并回送客户端,实现好友上线、下线通知。
客户端和客户端通讯采用UDP,客户端程序和服务器端也是UDP
上面步骤3是轮流向tencent的若干个服务器轮流发请求,这大概是他们的负载平衡的办法。
步骤4在服务器端纪录登陆客户的ip/port,这可能是经过了proxy的映射IP/Port,因此其他的client只要得到这个映射,就可以直接发到目的地。
也就是说,步骤5中的IP和Port未必是好友真正的ip和端口。因此,如果对方的端口不是4000/400x,八成它是在代理服务气后。
只有UDP协议才有这种奇怪的映射特性,所以可以做到代理服务器后的CLIENT也可接受其他人发来的消息。
但UDP协议是不稳定的,需要加时间戳、校验码等。而且长度一般在512字节内
简化的流程:
1。用户启动客户端程序,客户端程序首先用本地数据校验密码,如通过,则转到3;
2。如本地校验失败,则询问用户是否要求交给服务器验证;
3。客户端程序向服务器端口8000发出登陆数据包,其中包括qq号、密码等信息;
4。服务器校验密码后向客户端的4000(也可能是其他端口,要视具体的bind情况而定)端口回送响应数据包,并发送好友列表(客户端在本地机器上也存有一份好友列表),其中包括在线好友的名单与IP、端口号;
5。与好友通话时,客户端程序首先试图向该好友的ip直接发送数据,若发送失败(例如网络状态不好、防火墙或好友不在线),则交给服务器转发(转发有可能造成丢包);
6。好友收到信息后,回送一个确认信号给发送端,结束一次通话。
注:由于UDP协议不是一个“可靠”协议,故意上的发送、响应的交互过程有可能不是一次完成的,会出现多次发送、多次响应的情况,但有效发送、响应只有一次。
客户端程序会不断地(间隔只有几秒钟)向服务器发出确认信息包,以确认当前的网络连接有效;服务器收到信息包后,更新好友列表并回送客户端,实现好友上线、下线通知。
客户端和客户端通讯采用UDP,客户端程序和服务器端也是UDP
上面步骤3是轮流向tencent的若干个服务器轮流发请求,这大概是他们的负载平衡的办法。
步骤4在服务器端纪录登陆客户的ip/port,这可能是经过了proxy的映射IP/Port,因此其他的client只要得到这个映射,就可以直接发到目的地。
也就是说,步骤5中的IP和Port未必是好友真正的ip和端口。因此,如果对方的端口不是4000/400x,八成它是在代理服务气后。
只有UDP协议才有这种奇怪的映射特性,所以可以做到代理服务器后的CLIENT也可接受其他人发来的消息。
但UDP协议是不稳定的,需要加时间戳、校验码等。而且长度一般在512字节内