关于P2P的问题,望高手解答下,谢谢!
我有一个服务器S,IP为:116.252.*.*
然后客户端CA,外部IP为:222.216.*.*
客户端CB,外部IP为:117.141.*.*
然后操作如下:
CA连接服务器,得到外部IP和端口;
CA申请CB建立UDP直连,发送外部IP:222.216.*.*和端口号;
CB正常接收到申请,得到CA的外部IP和端口;
CB连接服务器,得到外部IP和端口;
CB向CA的外部IP地址和端口发送UDP包,这个时候,连接成功了(有的路由是成功的,我这测试的就是这样),但是问题出现了,这个时候,CA的recvfrom得到的IP竟然是服务器S的地址,也就是116.252.*.*,而不是CB的外部地址117.141.*.*;
关键的一步:将recvfrom得到的地址作为新的CB的外部地址,进行后面的通信。
如果进行了上面关键的一步,CA和CB就可以正常通信了,但是CA得到的CB外面IP是服务器的;而CB则可正常得到CA的外面IP;如果不进行上面关键一步,则CB可以向CA发信息,但是CA不能向CB发信息。原因就在于,这时发的地址是117.141.*.*
的。
为什么会这样呢??
CB可以正常得到CA的外部地址,并且按这个地址可以和CA通信;
但是CA得到的CB地址竟然是服务器的,而不是CB从服务器上得到的地址,难道是路由器的问题???