1,客户端A登陆的时候,发送一个UDP数据包给服务器,然后服务器根据该包获得客户端A的IP和端口并保存到UdpAddressMap(用登录名作为key保存)中。
2,客户端A执行操作的时候,发送一个消息,带上目标客户端B的登陆名。
3,服务器端获得消息后,将客户端B的端口发送给客户端B,然后B使用该端口建立UDP监听。
4,客户端B再发送一条信息给服务器,告诉它监听已经建立,服务器将B的IP和PORT发送给客户端A。
5,客户端A获得信息后根据获得的客户端B的IP和PORT,绕过服务器,直接往客户端B发送数据。
-----------------------------------------------------------Q—Q群聊天------------------------------------------------------
老孔() 10:29:49
a,b 登录后都把ip和port注册到服务器上,a向b发消息,先调用服务器接口,这个接口把b的ip和port返回给a,然后把a的ip和port给b,a和b同时连接对方即可
老孔() 10:31:12
要注意的是国内网络有点问题,就是同一个机器在 www.ip138.com
和 www.cz88.net
上获取的ip不同,这样你的客户端程序接收到打洞的请求时,不能根据服务器回给你的客户的ip了,要根据实际的判断
老孔() 10:31:18
我们遇到这个问题的
┎.le!┎. () 10:31:33
哦 我想想
老孔() 10:32:10
你做做就知道了
┎.le!┎. () 10:32:40
你说的同时连接对方是指两个客户端都是即有UDP客户端又有UDP服务端吗? 而不是一个作为服务端 一个作为客户端?
老孔() 10:32:59
udp发送和接收是一个端口来的
老孔() 10:33:23
互相先发打洞的信令,通了在传业务信息
------------------------------------------------------------------------------------------------------------------------
改良后的思路
1,客户端A登陆的时候,发送一个UDP数据包给服务器,然后服务器根据该包获得客户端A的IP和PORT并保存到UdpAddressMap(用登录名作为key保存)中。
2,客户端A要执行数据传送的时候,发送一个信息给服务器,带上目标客户端B的登陆名。
3,服务器将A的IP和PORT发给客户端B,同时将B的IP和PORT发给客户端A。
4,客户端A打开监听并向客户端B发送打洞信息,直到收到客户端B的回应信息停止打洞,开始正常传送信息。客户端B也是如此。
5,当用户退出的时候从UdpAddressMap去除该用户的IP和PORT信息。
分享到:
2010-03-18 17:19
浏览 5652
评论
1 楼
wwenr
2011-02-27
您好 我是一名在校学生 正在做一个关于即时聊天的毕设 碰到了一些问题 能不能请教您一下~~
我的QQ:53595177