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

时间:2016-06-21 13:37:50

标签: c# sockets tcp tcpclient tcplistener

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

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

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

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

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

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

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

1 个答案:

答案 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