首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有可能“中继”一个套接字吗?

有可能“中继”一个套接字吗?
EN

Stack Overflow用户
提问于 2011-07-16 01:43:52
回答 4查看 2.5K关注 0票数 1

我想知道在C#或Java中中继socket对象是可能的吗?(最好是C#)

我编写了很多小程序,并将它们托管在我的家用pc上,但我的pc在路由器后面,所以每次我想要创建一个新应用程序时,我都必须转发路由器上的一个端口。那么,是否有一种方法可以将tcp连接发送到同一台计算机上的另一个应用程序?例如,我获得了一个第一行文本为RELAY::21005的连接,然后它会将该端口转发到localhost:21005吗?

任何帮助,教程,代码片段将非常感谢。谢谢!:)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-16 03:35:14

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

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

我对C#的了解还不足以提供关于C#解决方案的建议,但在Java语言中,我会简单地做如下操作:

代码语言:javascript
运行
复制
while (true) {
    acceptConnectionOnNormalPort()
    connectToTargetPort()
    startThreadCopyingDataFromAcceptedPortToTargetPort()
    startThreadCopyingDataFromTargetPortToAcceptedPort()
}

你不可能轻易地扩展到成千上万的连接中……

票数 1
EN

Stack Overflow用户

发布于 2011-07-16 01:48:59

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

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

使用它需要端口共享服务to be up (默认情况下是禁用的):

Net.TCP端口共享服务在支持.NET Framework3.0的所有操作系统上都可用,但默认情况下未启用该服务。

所有这些都只有在你使用WCF服务的时候才有用。

票数 0
EN

Stack Overflow用户

发布于 2011-07-16 02:25:17

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

但是假设你想要编写一些程序...

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6711086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档