读书人

P2P UDP 打洞失败求见教

发布时间: 2013-01-21 10:15:39 作者: rapoo

P2P UDP 打洞失败,求指教
首先两个客户端通过服务端交换公网IP
然后已经成功接收对方公网IP的客户端马上分别对对应公网IP发送
但是无论怎样发送都接收不到
是不是还要做点什么的?

试了网上很多例子都不成功
[解决办法]
那就靠猜测,通过连续发送两次数据包根据返回的端口号猜测端口变化规律
[解决办法]
1,猜是一种
2,既然打通了,那就对指定的ip 指定的端口发送数据
3,接收方 监听对应的端口吧
4,这个还好像与路由或交换机的是否支持和设置有关系
5,一起研究吧 不太熟悉这方面
[解决办法]
不是说得到对方公网ip就可以发送成功的 排除路由的问题(牵扯到端口映射) 也是要A先向B发生打洞

报文 这时B的路由肯定会丢弃 但是这时A的路由会“认识”B(因为你往B发了数据) 这时候再通过

发送报文给服务器 让服务器“告诉”B 我的路由已经认识你了 你发消息我 让你的路由也“认识”我

然后B收到服务器的打洞命令 发送打洞报文给A A的路由已经“认识”B 所以链路已通 可以顺畅使用

udp开始通信
[解决办法]
两个客户端是不是在同一局域网?
[解决办法]
其实就是根据服务器的中转 先得到互相的ip信息 然后一方先发送报文让自己的路由不会丢弃对方的报文

然后通过服务器通知对方 也向你发送报文(因为这时候你怎么发送对方都是收不到的) 当对方知道你已经打洞了

再向你发送报文 这时候互相之间就已经“认识了” 后续就可以正常的发送需要的数据了
[解决办法]
你的两个客户端是用几个路由出去的?
[解决办法]

引用:
引用:
其实就是根据服务器的中转 先得到互相的ip信息 然后一方先发送报文让自己的路由不会丢弃对方的报文

然后通过服务器通知对方 也向你发送报文(因为这时候你怎么发送对方都是收不到的) 当对方知道你已经打洞了

再向你发送报文 这时候互相之间就已经“认识了” 后续就可以正常的发送需要的数据了

通知对方有没有打洞这步就没做,我就是……


就是因为你没做 所以A向B发的包永远被丢弃 你还不明白udp打洞的原理...
[解决办法]
引用:
引用:看了下逻辑没什么问题,当时我做实验的时候是通过两个路由两个ADSL出去,服务器收到的外网地址是不同的.你这种同外网地址相同的没有做过,可能路由会做某些处理.

两种情况都试过,不知道为什么不行,你以前做的成功了吗?能不能放源码出来看看,或者大概逻辑上是否和我的一样?


源码

读书人网 >VC/MFC

热点推荐