【问题标题】:Is it possible to 'relay' a socket?是否可以“中继”套接字?
【发布时间】:2011-10-06 08:49:06
【问题描述】:

我想知道是否可以在 C# 或 Java 中中继套接字对象? (最好是 C#)

我制作了很多小程序并将它们托管在我的家用电脑上,但我的电脑在路由器后面,所以每次我想制作新应用程序时都必须在路由器上转发一个端口。那么有没有办法将 tcp 连接发送到同一台计算机上的另一个应用程序?例如,我与第一行文本建立连接RELAY::21005,然后将该端口转发到localhost:21005

任何帮助、教程、代码 sn-ps 将不胜感激。谢谢! :)

【问题讨论】:

  • 不确定您是否需要外部程序告诉您的计算机要打开哪些端口。但是你有点描述代理服务,所以你可能会挖掘一些简单的开源代理项目,看看它们是如何转发数据的。这也是 ssh 隧道的全部意义所在,因此您可以使用它。
  • ssh 隧道如何允许共享端口?
  • @sixfeetsix - -L-R 选项打开一台机器上的监听端口,并将连接转发到另一台机器上的端口。超级用户对此有很多疑问:superuser.com/search?q=ssh+tunnel
  • @parsifal:再一次,这如何允许做端口共享之类的事情?
  • @sixfeetsix - 你读过 ssh 的文档吗?您对所阅读的内容有具体问题吗?因为隧道的工作原理非常清楚。

标签: c# java .net sockets networking


【解决方案1】:

使用建议的解决方案(第一行标识目标端口)可能会遇到的一个问题是,您必须更改所有客户端程序才能发送第一行。这对于您自己编写的程序来说很容易,但如果您想连接到 PC 的 Web 服务器或 ssh 守护程序等,就不太方便了。这当然不是不可能,但确实很难。

我建议您的路由服务器侦听两个端口 - 一个控制端口和一个“普通”端口(目前我想不出更好的名称)。您将向控制端口发送控制消息以指示“直到另行通知将正常端口上的所有传入连接重定向到端口 nnnn”。这避免了必须操纵客户端协议。

我没有足够的 C# 知识来提供有关 C# 解决方案的建议,但在 Java 中我会简单地执行以下操作:

while (true) {
    acceptConnectionOnNormalPort()
    connectToTargetPort()
    startThreadCopyingDataFromAcceptedPortToTargetPort()
    startThreadCopyingDataFromTargetPortToAcceptedPort()
}

您无法轻松地将其扩展到数千个连接...

【讨论】:

    【解决方案2】:

    K 我收回我的评论,看看这个:

    http://msdn.microsoft.com/en-us/library/aa395195.aspx

    使用这个需要端口共享服务to be up(默认禁用):

    Net.TCP 端口共享服务适用于所有操作系统 支持 .NET Framework 3.0,但该服务未启用 默认。

    所有这些只有在您使用 WCF 服务时才对您有用。

    【讨论】:

      【解决方案3】:

      IMO 最简单的方法是使用 ssh 隧道。正如我在评论中所写,有很多关于 SU 的问题会告诉你如何做到这一点。

      但是假设你想编程一些东西......

      您需要创建一个客户端和一个服务器。客户端将拥有在您想要打开的任何本地端口上调用accept 的线程。当连接到达某个端口时,您创建另一个线程来打开与服务器的连接并不断通过线路发送数据。

      服务器程序侦听您在防火墙中打开的单个端口。它等待该端口上的连接,当它收到一个连接时,它会打开到指定本地端口的连接。然后它将字节从一个到另一个。

      唯一的技巧是你必须定义一个协议来指定客户端-服务器流中的目标端口。最简单的方法是在流的开头写入一个两字节整数。

      【讨论】:

        【解决方案4】:

        是的,可以中继套接字。 你可以使用转http://en.wikipedia.org/wiki/Traversal_Using_Relay_NAT

        一些 TURN 库/应用程序:

        • pjnath
        • turnserver.sourceforge.net

        【讨论】:

          猜你喜欢
          • 2015-01-02
          • 1970-01-01
          • 1970-01-01
          • 2013-04-05
          • 2010-09-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多