日期:2014-05-20  浏览次数:20834 次

Tcp p2p 点对点 穿透 战败!
前几天在做一个文件点对点传输的项目,涉及到NAT穿透,从上个星期到今天一直在调试和测试,最后到今天,看来已经战败!

以下是两篇是我作为技术依据的文章:

http://blog.csdn.net/ssihc0/archive/2008/10/10/3053395.aspx
http://hi.baidu.com/wangzhe1945/blog/item/3e72fffe47fc2f365d60080c.html
http://hi.baidu.com/wangzhe1945/blog/item/5ccd3fa4e3ee67f09152ee38.html

总的技术原理归纳如下:
首先还是 AB分别和服务器S分别建立连接,S记录AB的互联网实际终端。然后S分别向AB发送对方的实际终端。接着,从A和B向S连接时使用的端口,AB都异步调用connect函数连接对方的实际终端(就是S告诉的终端),同时,AB双方都在同一个本地端口监听到来的连接(也可以先监听,再connect更好)。由于双方都向对方发送了connect请求(假设各自的SYN封包已经穿过了自己的NAT),因此在对方connect请求到达本地的监听端口时,路由器会认为这个请求是刚刚那个connect会话的一部分,是已经被许可的,本地监听端口就会用SYN-ACK响应,同意连接。这样,TCP穿透NAT的点对点连接就成功了。 

自己写的代码穿透失败。下载了别人p2p TCP 穿透的代码 http://download.csdn.net/source/700961 ,发现如果2个机器在同一个局域网(同一内网)内是可以传输文件,但是不同的陆游器(不同内网)下,穿透不成功。


我不是高手,p2p TCP 穿透 战败。

------解决方案--------------------
不要泄气,继续坚持
------解决方案--------------------
找原因,呵呵
------解决方案--------------------
探讨
不要泄气,继续坚持

------解决方案--------------------
没搞过,帮顶,继续努力
------解决方案--------------------
A B都开启一个服务端口侦听,才能内网对内网的PtoP
A B开启的端口是多少是S服务知道的
要想联接,问S对方端口就行了。
------解决方案--------------------
加油
------解决方案--------------------
TCP 我也没搞定。。。。琢磨很久了。。。
------解决方案--------------------
关键还是底层的原理了
从这方面找找突破口看看
------解决方案--------------------
tcp的好像比较难。udp实现起来比较简单,要有一台在公网的机器做服务器,它用来当有内网的机器存在时帮助建立连接。
------解决方案--------------------
进来学习!
------解决方案--------------------
up
------解决方案--------------------
学习下``
------解决方案--------------------
up
------解决方案--------------------
lz加油,期待解决后放码啊
------解决方案--------------------
加油!!!!!
------解决方案--------------------
S放的是A和B的NAT服务地址,S只知道A和B的公网地址,他不管A和B的私有地址,NAT负责把公网地址转为A和B的内部私有地址

A和B 的私有地址是不能通过路由的。
------解决方案--------------------
RFC
http://midcom-p2p.sourceforge.net/draft-ford-midcom-p2p-01.txt
------解决方案--------------------
坚持就是一种胜利
------解决方案--------------------

------解决方案--------------------
tcp的比较难。udp实现起来比较简单
------解决方案--------------------
有时间再看
------解决方案--------------------
继续努力。
------解决方案--------------------
努力了,失败也是成功

------解决方案--------------------
留名,等高手解答再来看...
------解决方案--------------------