我正在做一种p2p通讯软件,用的是UDP协议。原理是这样的:A和B分别登录到服务器S,由于A和B都是处在内网中,登录服务器时,会把内网IP和端口映射成外网IP和端口。然后S再把A和B的地址和端口(经过A和B的路由器映射后的外网IP和端口)互相发给对方,然后A和B互相向对方的IP和端口发送数据,一秒钟发一次,直到收到对方的数据,就算是联系上了,就停止。可是我发现:结果是:A和B永远也收不到对方的数据,发确实是发的,一秒钟向对方发一次(对方的经过路由器映射的外网IP和端口),但是永远收不到对方的数据,互相收不到。问题出在哪儿呢?我发的数据简单,就十几个字节。而且只向对方的经过路由器映射后的外网IP和端口发送,不向它的原来的内网IP和端口发送(这样对吗?)我的两台电脑,就是通讯的双方:A和B,一个是用屋内的路由器经过宽带上网接入因特网的,一个是手机4G上网做热点,然后电脑连到这个手机热点上上网的,这时,手机就起到一个路由器的作用吧?这里面哪里出了问题?为什么收不到对方的数据?(一秒钟发一次,其实发一次后,就等于打好洞了,对方的数据就应该能接收了。可是一直收不到)。

解决方案 »

  1.   

    我在想:难道我的通讯的两台电脑,一个是屋内路由器经宽带上网,一个是用手机作热点上网。这两个路由器中,难道有一个是所谓的“对称型NAT”?如果是这样,就确实无法穿透成功了。可是这种路由器NAT类型应该很少吧?
      

  2.   

    好了,穿透不成功的原因我自己找到了。我下载了一个检测NAT类型的软件,发现用手机4G开热点,电脑连上热点上网的那个,路由器的NAT类型是Symmetric型,也就是对称型。这种路由器是无法穿透成功了。用屋内路由器接入宽带上网的那个,NAT类型是Port Restricted Cone型,这种类型,如果A和B都是这种类型,还是可以穿透成功的,可是一个是Symmetric型,一个是Port Restricted Cone型,就不可能穿透成功了。可是我想问:如果生活中,这种Symmetric型的路由器过多,那p2p通讯岂不是大大受到限制?成功率大大降低?
      

  3.   

    我目前也在看这方面的东西,也是直接遇到对称型nat,怎么都打不通。目前正在根据网上说的端口猜测方法试试,但是据说效率很低,成功率也不高。大家有好的想法互相学习一下!
      

  4.   

    skype是怎样穿透成功的?它可是经常在手机上使用,而手机上大多是对称型的。