二台不同局域网内的电脑,是不是不能使P2P技术通信
我做了个服务端,放在外网的服务器上,让二台不同局域网电脑,登录上去。我使用用P2P UDP打洞穿透技术,但是发现,无论怎么搞,都通不了,是不是只能通过服务器中转来通信了?
[解决办法]
P2P主要用在不同局域网内的电脑上。
[解决办法]
需要第三方机器吧,至少让2个机器通讯上
[解决办法]
有中转服务器,就要看是否打洞没有成功了.
[解决办法]
怎么穿透的?某一端或者两端的路由是不是对称的?
[解决办法]
理论上是可以打洞的,是不是你打洞的方式不对啊
[解决办法]
UDP打洞的一个基本支持是需要网关支持【锥形NAT】,如果你的网关是【对称型NAT】就没办法打洞了。
然后【锥形NAT】又分为几种不同的类型:
1.Full:这种NAT内部的机器A连接过外网机器C后,NAT会为A打开一个端口,并且这个端口相当于绑定到内网机器A了,在此之后外网的任何机器发到这个打开的端口的UDP数据报都可以到达A.
2.Restricted:这种NAT内部的机器A连接过外网的机器C后,NAT为A打开一个端口,并且这个端口相当于绑定到内网机器A,在此之后只有机器C可以用自己的任何端口和A通信,其他的外网机器不行.
3.Port Restricted:这种NAT内部的机器A连接过外网的机器C的端口P后,NAT为A打开一个端口,并且这个端口相当于绑定到内网机器A,在此之后只有机器C可以用的自己的端口P和A通信,其他的外网机器不行.
如果楼主的网关NAT是第一种类型,直接获取任何一个内网机器的外网IP和端口就可以互通,但是对于后面两种方式的NAT,单向链接还是行不通。
但是借助中间服务器B可以实现以上三种NAT的UDP打洞。
方法就是:让A和C同时向服务器B发送UDP数据包。
1——A:通过端口12345发送UDP数据到服务器B,服务器记录A的公网IP和端口并告知C
2——C:通过端口12345发送UDP数据到服务器B,服务器记录C的公网IP和端口并告知A
3——A:通过端口12345发送UDP数据到服务器B所记录的C的公网IP和端口,于此同时A通知服务器B“我已经请求向C发送数据,请告诉他”,然后服务器B通知C进行下一步处理4
4——C:接收到服务器B发送的通知,然后C通过端口12345发送UDP数据到服务器B所记录的A的公网IP和端口,然后告诉服务器B“我已经回应了A的发送请求”,到这里UDP穿透的隧道已经打通了,然后就可以互通了。
楼主修改一下你的打洞方法试试吧。