上篇文章中做了UDP打洞,这篇当然就会是TCP打洞了,两个处于不同内网的两台机器如何通过TCP/IP协议进行链接通讯呢?这其实跟UDP打洞差不多,基本步骤是这个样子的。 假设我们有两台处于不同内网的两台机器A和B和一台众所周知外网IP的服务器S,而机器A中运行着通讯的服务端程序B运行着通讯的客户端程序,那么
1、A连接S,S记录A的外网IP与通讯的端口 2、B连接S 3、S将A与此通讯的端口号返回给A 4、S将A与此连接的IP与端口号返回给B 5、A在程序中将服务绑定并侦听在从S返回的端口 6、B使用从S返回的IP与端口连接A
这样A与B就成功连接了,这里需要注意的一点就是两个socket在同一个端口绑定的问题,socket提供了setsockopt函数,其中参数SO_REUSEADDR可以解决这个问题
下面是c语言代码示例
S中的程序
A中的程序
B中的程序