我有一个C#控制台应用程序,我正在尝试实施TCP打孔。
我需要在本地端口上侦听并同时(同时/异步)使用相同的本地端口连接到2个不同的远程主机(实际上是远程主机公共和专用端点)。
据我所知,我不知何故需要绑定套接字/端口,但我无法在C#中解决这个问题。
有TCPListener,TCPClient和Socket类,我不知道用哪些来完成我需要的东西。
我正在遵循本指南http://www.bford.info/pub/net/p2pnat/index.html第4.2章
- 来自 A 和 B (客户端)的相同本地TCP端口,用于注册(服务器) S , A 和 B 每个异步地按 S 报告的那样对其他公共和专用端点进行传出连接尝试,同时在各自的本地TCP端口上侦听传入连接
醇>
我已经使用NodeJS实现了服务器部分,并且工作正常,我正在努力解决上面提到的本地端口问题。
答案 0 :(得分:0)
我非常确定TCP只允许客户端和服务器以及端口之间的1-2-1连接。设置多个连接的唯一方法是创建两个不同的套接字。
TCP打孔你也是指我以前试过的。你需要基本上使用中继服务器告诉A和B如何连接..所以做如下:
1)客户端A在一个端口上连接到服务器
2)服务器告诉客户B您的IP和端口(这将是您将要设置的新连接,与您与服务器的连接不同)
3)服务器告知客户端A客户端B将使用的IP和端口
4)客户端A使用提供的信息直接创建与客户端B的新连接
5)客户B使用其关于您的" new"的信息。尝试接受传入请求的连接
6)由于延迟,它可能无法握手几次,因此需要在某种转发器中构建以继续尝试连接
7)你最终应该直接连接到B