终于解决了关于基于Tcp的p2p的内网穿透问题
其实本该在去年就解决这个问题的,代码写出来了,只是一直没时间去验证。
这几天重写了一下。
中国的网络基本是全是内网,通过路由的nat转换;udp的p2p实现起来非常简单。
只是udp太不稳定了,如果网络快的情况下丢包太严重。
所以一直想是否能通过tcp来代替udp,还好在国外的一个论坛上看到了相关的解决方案
http://www.brynosaurus.com/pub/net/p2pnat/
相对于udp来说,复杂一点,只多了2步而已,网站上给出了全部步骤,但真正的建立并不需要完全按网站的,
我的方法是
1建立2个服务器,(for Base Tcp,for Hole Tcp)
2.打开Client,4个Socket,(1 for Base Tcp Socket 2 for Hole Socket 3,for Listen 4 for Connect To Listen)
3,建立base连接,
4发起hole连接,client—server,
5.server通知client打洞Hole,server通知client IP and Port
6.client Listen 本地的hole端口
7 client请求connect TO client ;
8.如果失败client通知对方连接自己
Server:
Client 1
Client2