二台不同局域网内的电脑,是不是不能使P2P技术通信

lesgo 2012-06-18 10:29:33
我做了个服务端,放在外网的服务器上,让二台不同局域网电脑,登录上去。我使用用P2P UDP打洞穿透技术,但是发现,无论怎么搞,都通不了,是不是只能通过服务器中转来通信了?
...全文
1218 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lesgo 2012-06-18
  • 打赏
  • 举报
回复
我现在的穿透就是:A,B登录到服务端S,同时会隔段时间发个心跳包给服务端,服务端记录它们的外网IP和端口,A要与B通信时,就从服务端获取到B的IP和端口,如果A发送到B不通,就让服务端把A的IP与端口,告诉B,让B往A打洞
yby4769250 2012-06-18
  • 打赏
  • 举报
回复
理论上是可以打洞的,是不是你打洞的方式不对啊
lesgo 2012-06-18
  • 打赏
  • 举报
回复
主要用来传送文件,中转服务器的话,就太慢了
我感觉二端的路由好像是对称的
如果一台PC机是公网IP,一台PC机是局域网IP,登录到服务端时,这二台PC用UDP通信没问题
无言猪 2012-06-18
  • 打赏
  • 举报
回复
怎么穿透的?某一端或者两端的路由是不是对称的?
oyljerry 2012-06-18
  • 打赏
  • 举报
回复
有中转服务器,就要看是否打洞没有成功了.
ouyh12345 2012-06-18
  • 打赏
  • 举报
回复
需要第三方机器吧,至少让2个机器通讯上
这不是鸭头 2012-06-18
  • 打赏
  • 举报
回复
P2P主要用在不同局域网内的电脑上。
lesgo 2012-06-18
  • 打赏
  • 举报
回复
http://www.lihuasoft.net/article/show.php?id=2478
我就是按这个网址例子改写的,拿这例子测试不行,这例子的方法,和你说的方法一样的
Tishion 2012-06-18
  • 打赏
  • 举报
回复
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穿透的隧道已经打通了,然后就可以互通了。

楼主修改一下你的打洞方法试试吧。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧