欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

P2P技术 TCP打洞 内网穿透

程序员文章站 2022-07-01 15:29:10
...
编程语言:C/C++
主要使用:SOCKET套接字
编程软件:VS2015
技术实现:P2P TCP打洞 内网穿透实验
源码:http://download.csdn.net/download/aaron133/10231687

【1】服务器S:

1、监听等待主机A主机B连接.
2、服务器S主机A主机B对方的公网IP地址以及端口号告知对方(内网IP地址也可以包含,因为可能主机在同一个NAT后面).
3、关闭连接

【2】主机A:

1、创建套接字1.
2、设置套接字1为SO_REUSEADDR重用标记.
3、将套接字1绑定到一个指定端口号,例如8888.
4、连接服务器S
5、等待服务器发送主机B公网IP地址以及端口号
6、得到主机B公网IP地址以及端口号之后,新建另外一个套接字2.
7、设置套接字2为SO_REUSEADDR重用标记
8、将套接字2绑定到一个8888端口(第3步的端口号).
9、循环connect连接主机B.

【3】主机B:

主机A的步骤完全一样,当2个人同时发起connect时,connect返回0,这个套接字就是你们建立的链接.(不需要listen和accept

【注意】

1、NAT类型不同,导致一些方法可能不管用,网上的很多一方connect(被NAT直接丢弃),对于我的NAT不管用.
2、还有一种先connect在对方NAT留下记录,然后在让对方connect,我方accept也不管用.