首页 文章

C#TCP在同一本地端口上侦听和连接

提问于
浏览
1

我有一个C#控制台应用程序,我正在尝试实现TCP打孔 .

我需要在本地端口上侦听并同时(同时/异步)使用相同的本地端口连接到2个不同的远程主机(实际上是远程主机公共和专用 endpoints ) .

据我所知,我不知何故需要绑定套接字/端口,但我无法在C#中解决这个问题 .

有TCPListener,TCPClient和Socket类,我不知道用哪些来完成我需要的东西 .

我正在按照本指南http://www.bford.info/pub/net/p2pnat/index.html第4.2章

从A和B(客户端)用于向(服务器)S,A和B注册的相同本地TCP端口,每个异步地按S报告的方式对其他公共和专用 endpoints 进行传出连接尝试,同时监听传入连接在各自的本地TCP端口上 .

我已经使用NodeJS实现了服务器部分,并且工作正常,我正在努力解决上面提到的本地端口问题 .

1 回答

  • 0

    我很确定TCP只允许客户端和服务器以及端口之间的1-2-1连接 . 设置多个连接的唯一方法是创建两个不同的套接字 .

    TCP洞打孔你也是我以前试过的 . 你需要基本上使用中继服务器告诉A和B如何连接..所以做如下:

    1)客户端A在一个端口上连接到服务器

    2)服务器告诉客户B您的IP和端口(这将是您将要设置的新连接,与您与服务器的连接不同)

    3)服务器告知客户端A客户端B将使用的IP和端口

    4)客户端A使用提供的信息直接创建到客户端B的新连接

    5)客户端B使用其有关“新”连接的信息来尝试接受传入的请求

    6)由于延迟,它可能无法握手几次,因此需要在某种转发器中构建以继续尝试连接

    7)你最终应该与B直接联系

相关问题