【发布时间】:2016-10-23 02:19:51
【问题描述】:
我有一个 C# 控制台应用程序,我正在尝试实现 TCP 打孔。
我需要监听一个本地端口,同时(同时/异步)使用同一个本地端口连接到 2 个不同的远程主机(实际上是远程主机公共和私有端点)。
据我了解,我需要以某种方式绑定套接字/端口,但我无法在 C# 中解决这个问题。
有 TCPListener、TCPClient 和 Socket 类,我不知道用哪些类来完成我需要的。
我正在关注本指南http://www.bford.info/pub/net/p2pnat/index.html 第 4.2 章
- 来自 A 和 B(客户端)用于向(服务器)S、A 注册的相同本地 TCP 端口 和 B 每个都按照 S 的报告异步尝试到对方的公共和私有端点的传出连接,同时在各自的本地 TCP 端口上侦听传入连接.
我已经使用 NodeJS 实现了服务器部分,并且工作正常,我正在为上面提到的本地端口问题而苦苦挣扎。
【问题讨论】:
-
有没有可能
their respective local TCP ports和用来连接S的不一样?如果是,它是哪个其他端口? -
如果您有两个线程,尝试将侦听器和 TcpClient 绑定到同一个端口时是否会出错?
-
我不认为我在使用单独的线程,我使用任务运行它们并调用 Task.WaitAll() 所以带有侦听器的方法和带有 TCPClient 的方法同时运行,我的问题是实际上告诉 TCPClient 使用/绑定到与侦听器相同的本地端口。我昨天发布了这个,你可以看到使用的代码stackoverflow.com/questions/37930824/…
-
好吧,如果你明确告诉客户端 A 在端口 '25000' 上连接到服务器,当实际连接建立时,如果你检查属性,它通常会说它连接到不同的端口.那是您用于“私人”连接的端口吗?
-
我不需要告诉它使用哪个端口连接到服务器,我只需要知道它用于连接到服务器的“本地”端口,以便我以后可以使用它监听并连接到另一个客户端。
标签: c# sockets tcp tcpclient tcplistener