Server 和 Client A 同一台机器!
Client B 一台机器,在同一局域网, 都没有安装防火墙之类的软件,用网上的例子,是可以打通的!。现在的思路是
1) Client A 用 UDP connect to Server, Server 发送 client A 接收 自己的 IP 和 Port;
2) Client 用 TCP (之前TCP连接已经建立) 发自己的 IP 和 Port , 和目标 Client B 发给server;
3) server TCP 发送 Client A 的IP 和PORT 给 Client B ;
4) Client B 启用 UDP connect to server; (有数据包通信的)
5)Client B 用 UDP 给 client A 发送数据包.( 此地址是 Server 传过来的IP 和PORT) // 这里。,用 iris 监视
可以看到数据包,并且IP 和 port 都是正确!但 client A 无法收到 client B 的数据包请问现在我的问题出在哪里?
是打洞的步骤出了问题!
还是程序的其他问题?
Client B 一台机器,在同一局域网, 都没有安装防火墙之类的软件,用网上的例子,是可以打通的!。现在的思路是
1) Client A 用 UDP connect to Server, Server 发送 client A 接收 自己的 IP 和 Port;
2) Client 用 TCP (之前TCP连接已经建立) 发自己的 IP 和 Port , 和目标 Client B 发给server;
3) server TCP 发送 Client A 的IP 和PORT 给 Client B ;
4) Client B 启用 UDP connect to server; (有数据包通信的)
5)Client B 用 UDP 给 client A 发送数据包.( 此地址是 Server 传过来的IP 和PORT) // 这里。,用 iris 监视
可以看到数据包,并且IP 和 port 都是正确!但 client A 无法收到 client B 的数据包请问现在我的问题出在哪里?
是打洞的步骤出了问题!
还是程序的其他问题?
如果这样的不行话,只能再想它法了!
UDP 打洞所经的历程,已经全部实现,TCP server 只作一个辅助作用而已,
所以......
而iris 可以监视到发送过来的数据包,是不是代表已经打洞成功呢?
即使是测试,server的功能也不会少吧...
可你描述的server就只干了一件事,把A的IP,PORT 告诉B
本来就想偷这个懒,
凭预感,与TCP无关的! 那我把这个IP 和 Port 用 UDP 传吧。
Client B 用 UDP 给 client A 发送数据包 这个步骤,只是在B的NAT上打了个洞,到达A的NAT后,查询不到你的ip/port记录,会被丢弃的。。到此已经基本成功了。。加上一步:
Client A隔段时间后,想Client B的NAT上发数据。。 由于洞已经打通了,数据道道B的NAT后,会有A的IP/PORT记录,然后UDP包就会被转发到Client A。。
原则就是:A连接B,就是B先发数据给A,在自己那边打个洞,然后A在发数据给B,通过那个洞就进去了。。
NAT设备必须满足如下一个条件:对外的连接,如果源MAC,PORT一样,在NAT上就不会开启新的端口,直接利用原有端口。。只有很少的NAT不是这样。对内的数据包转发规则:只有源ip,源端口在NAT上有记录了,才向内部机器转发。(记录的过程,就是你的最后一步,就是自己给自己打洞,然后别人用那个洞钻进去。)PS:就是因为打洞的时候,我还是用得那个原有端口,所以在NAT上不会产生一个新的port,所以后面进洞的时候,直接使用服务器发过来的洞口就可以直接进去了。。这点非常关键。
现在也不打算确定原因在哪里。或许也没有这个必要吧!
一样的模式能打通即可!