java穿透内网实现点对点通信的思考

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信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值