A
Another_eYes
Unregistered / Unconfirmed
GUEST, unregistred user!
写了一个P2P应用, 使用UDP传送数据. clientA向server发送下载请求, server通过检测如果发现有其它client(比如clientB)具备clientA所请求的数据, 则通知ClientA到clientB进行下载, 如果没有其它client有数据则从本机提供clientA下载.
功能基本都实现了, 现在遇到一个很郁闷的问题: 如果clientA和ClientB都位于防火墙后时, clientA向server请求数据然后发觉需要重定向到clientB时则向clientB的外网ip和端口发送连接请求(设置9秒超时并每隔3秒发送一次的一个UDP包), 同时server也通知clientB clientA将要连入, 此时clientB也向clientA的外网ip和端口发送了连接请求. 根据NAT打洞的原理应该此时clientA和ClientB能建立起连接并能互相通讯了, 可是实际调试时发现它们之间无法建立连接. 不论ClientA还是ClientB都只能记录到向对方发送的UDP包但是都收不到对方的回应.
请问出现这种问题的原因是什么? 是不是我遗漏了什么?? NAT本身应该可以支持打洞技术的, 因为ClientA和ClientB能够通过QQ互相发送文件(这个应该是通过同样原理的UDP包实现的)
功能基本都实现了, 现在遇到一个很郁闷的问题: 如果clientA和ClientB都位于防火墙后时, clientA向server请求数据然后发觉需要重定向到clientB时则向clientB的外网ip和端口发送连接请求(设置9秒超时并每隔3秒发送一次的一个UDP包), 同时server也通知clientB clientA将要连入, 此时clientB也向clientA的外网ip和端口发送了连接请求. 根据NAT打洞的原理应该此时clientA和ClientB能建立起连接并能互相通讯了, 可是实际调试时发现它们之间无法建立连接. 不论ClientA还是ClientB都只能记录到向对方发送的UDP包但是都收不到对方的回应.
请问出现这种问题的原因是什么? 是不是我遗漏了什么?? NAT本身应该可以支持打洞技术的, 因为ClientA和ClientB能够通过QQ互相发送文件(这个应该是通过同样原理的UDP包实现的)