我想知道在C#或Java中中继socket对象是可能的吗?(最好是C#)
我编写了很多小程序,并将它们托管在我的家用pc上,但我的pc在路由器后面,所以每次我想要创建一个新应用程序时,我都必须转发路由器上的一个端口。那么,是否有一种方法可以将tcp连接发送到同一台计算机上的另一个应用程序?例如,我获得了一个第一行文本为RELAY::21005
的连接,然后它会将该端口转发到localhost:21005
吗?
任何帮助,教程,代码片段将非常感谢。谢谢!:)
发布于 2011-07-16 03:35:14
您建议的解决方案(第一行标识目标端口)可能会遇到的一个问题是,您必须更改所有客户端程序才能发送第一行。这对于你自己编写的程序来说很容易,但是如果你想连接到你PC的web服务器或ssh守护进程等,就不那么方便了。当然,这并不是不可能的,但确实会让它变得困难。
我建议您的路由服务器侦听两个端口-一个控制端口和一个“普通”端口(我现在想不出更好的名称)。您可以向控制端口发送控制消息,以指示“在另行通知之前,将正常端口上的所有传入连接重定向到端口nnnn”。这就避免了必须操纵客户端协议。
我对C#的了解还不足以提供关于C#解决方案的建议,但在Java语言中,我会简单地做如下操作:
while (true) {
acceptConnectionOnNormalPort()
connectToTargetPort()
startThreadCopyingDataFromAcceptedPortToTargetPort()
startThreadCopyingDataFromTargetPortToAcceptedPort()
}
你不可能轻易地扩展到成千上万的连接中……
发布于 2011-07-16 01:48:59
我收回我的评论,看看这个:
http://msdn.microsoft.com/en-us/library/aa395195.aspx
使用它需要端口共享服务to be up (默认情况下是禁用的):
Net.TCP端口共享服务在支持.NET Framework3.0的所有操作系统上都可用,但默认情况下未启用该服务。
所有这些都只有在你使用WCF服务的时候才有用。
发布于 2011-07-16 02:25:17
最简单的方法是使用ssh隧道。正如我在我的评论中所写的那样,SU上有很多问题可以告诉你如何做到这一点。
但是假设你想要编写一些程序...
您将需要创建一个客户端和一个服务器。客户端将拥有在您想要打开的任何本地端口上调用accept
的线程。当一个连接到达一个端口时,您可以创建另一个线程来打开到服务器的连接,并不断地通过网络发送数据。
服务器程序监听您在防火墙中打开的单个端口。它等待该端口上的连接,当它接收到连接时,它会打开到指定本地端口的连接。然后,它将字节从一个打乱到另一个。
唯一的诀窍是,您必须定义一个协议来指定客户端-服务器流中的目标端口。最简单的方法是在流的开头写一个两个字节的整数。
https://stackoverflow.com/questions/6711086
复制相似问题