我正在尝试使用mingw toolchain来实现使用windows socket打孔的TCP打孔。我认为这个过程是正确的,但洞似乎并不需要。我用this作为参考。TCP打孔
- 甲和乙连接到服务器小号
- 小号发送到甲,乙的路由器IP +它用于连接到小号端口
- S对于B
- 甲开始2个线程: 连接到乙的路由器与由小号
- 另一个线程发送来的信息
- 一个线程试图在等待在相同的传入连接端口用于连接到它的路由器时,它连接到小号
- 乙做同样的
我在代码中没有问题,我想既然:
- 一个和乙确实得到了对方的IP和端口使用
- 他们都是听在他们用来连接到他们的路由器时,他们用于连接到他们的服务器
- 他们都连接到正确的IP和端口,但超时(代码错误
10060
)
我错过了什么?
编辑:在进程资源管理器的帮助下,我看到一个客户端设法建立到对等端的连接。但同行似乎并未考虑建立联系。
这是我用Wireshark捕获的东西。为了示例,服务器S和客户端A在同一台PC上。服务器S侦听重定向到该PC的特定端口(8060
)。 乙仍尝试右侧IP连接,因为它认为通过小号发送的一个公共地址是localhost
,因此使用的小号而不是公网IP。(我已经由占位符替换公网IP)
编辑2:我认为混乱是由于这样的事实,传入和outcoming连接请求数据相同的端口上转移。这似乎弄乱了连接状态,因为我们不知道哪个套接字将从端口获取数据。如果我引用MSDN:
的
SO_REUSEADDR
套接字选项允许套接字强制绑定到 端口被其他插座。在调用与原始套接字 相同的端口上的绑定之前,第二个套接字调用setsockopt,其中将optname参数设置为SO_REUSEADDR
,并将optval参数集 设置为布尔值TRUE
。 第二个套接字成功绑定后,绑定到该端口的所有套接字的 行为不确定。
但在同一端口上说话是由TCP打洞技术要求打通孔!
那么你对TCP打孔的解决方案是什么?我对此感兴趣。 – petersaints 2012-04-04 16:23:31
你能解决这个问题,并做TCP打孔? – pkrish 2012-06-19 14:33:39
@pkrish我只设法启动同时打开TCP(请参阅所选答案的评论) – Giann 2012-06-21 09:11:36