C# 有没有可能';继电器';插座?
我想知道是否可以在C#或Java中中继套接字对象?(最好是C#) 我有很多我制作的小程序,并把它们放在我的家用电脑上,但是我的电脑在路由器后面,所以每次我想制作一个新的应用程序时,我都必须在路由器上转发一个端口。那么,有没有一种方法可以将tcp连接发送到同一台计算机上的另一个应用程序?例如,我在中获得了一个连接,第一行文本是C# 有没有可能';继电器';插座?,c#,java,.net,sockets,networking,C#,Java,.net,Sockets,Networking,我想知道是否可以在C#或Java中中继套接字对象?(最好是C#) 我有很多我制作的小程序,并把它们放在我的家用电脑上,但是我的电脑在路由器后面,所以每次我想制作一个新的应用程序时,我都必须在路由器上转发一个端口。那么,有没有一种方法可以将tcp连接发送到同一台计算机上的另一个应用程序?例如,我在中获得了一个连接,第一行文本是RELAY::21005,然后将该端口转发到localhost:21005 任何帮助、教程、代码片段都将不胜感激。谢谢!:) K我收回我的评论,看看这个: 使用此服务需要端
RELAY::21005
,然后将该端口转发到localhost:21005
任何帮助、教程、代码片段都将不胜感激。谢谢!:) K我收回我的评论,看看这个: 使用此服务需要端口共享服务(默认情况下禁用): Net.TCP端口共享服务在所有操作系统上都可用 它支持.NET Framework 3.0,但该服务不是由 默认
所有这些只有在您使用WCF服务时才有用。K我收回我的评论,请查看以下内容: 使用此服务需要端口共享服务(默认情况下禁用): Net.TCP端口共享服务在所有操作系统上都可用 它支持.NET Framework 3.0,但该服务不是由 默认
所有这些只有在您使用WCF服务时才有用。IMO最简单的方法是使用ssh隧道。正如我在评论中所写的,关于SU有很多问题将告诉你如何做到这一点 但是假设你想编一些程序 您需要创建一个客户机和一个服务器。客户端将有线程在您想要打开的任何本地端口上调用
accept
。当连接到端口时,您将创建另一个线程,该线程将打开到服务器的连接,并通过导线持续发送数据
服务器程序侦听您在防火墙中打开的单个端口。它等待该端口上的连接,当收到连接时,它打开到指定本地端口的连接。然后它将字节从一个移动到另一个
唯一的技巧是,您必须定义一个协议来指定客户机-服务器流中的目标端口。最简单的方法是在流的开头写入一个两字节的整数。IMO最简单的方法是使用ssh隧道。正如我在评论中所写的,关于SU有很多问题将告诉你如何做到这一点 但是假设你想编一些程序 您需要创建一个客户机和一个服务器。客户端将有线程在您想要打开的任何本地端口上调用
accept
。当连接到端口时,您将创建另一个线程,该线程将打开到服务器的连接,并通过导线持续发送数据
服务器程序侦听您在防火墙中打开的单个端口。它等待该端口上的连接,当收到连接时,它打开到指定本地端口的连接。然后它将字节从一个移动到另一个
唯一的技巧是,您必须定义一个协议来指定客户机-服务器流中的目标端口。最简单的方法是在流的开头写入一个两字节的整数。建议的解决方案(第一行标识目标端口)可能面临的一个问题是,您必须更改所有客户端程序才能发送第一行。这对于您自己编写的程序来说很容易,但如果您想连接到PC的web服务器或ssh守护进程等,就不那么方便了。当然,这不是不可能的,但确实让它变得很难 我建议您的路由服务器侦听两个端口—一个控制端口和一个“普通”端口(目前我想不出更好的名称)。您将向控制端口发送控制消息,以指示“在进一步通知之前,将正常端口上的所有传入连接重定向到端口nnnn”。这避免了操作客户端协议 我对C#了解不够,无法提供有关C#解决方案的建议,但在Java中,我只想做如下事情:
while (true) {
acceptConnectionOnNormalPort()
connectToTargetPort()
startThreadCopyingDataFromAcceptedPortToTargetPort()
startThreadCopyingDataFromTargetPortToAcceptedPort()
}
您将无法轻松扩展到数千个连接…建议的解决方案(第一行标识目标端口)可能面临的一个问题是,您必须更改所有客户端程序才能发送第一行。这对于您自己编写的程序来说很容易,但如果您想连接到PC的web服务器或ssh守护进程等,就不那么方便了。当然,这不是不可能的,但确实让它变得很难 我建议您的路由服务器侦听两个端口—一个控制端口和一个“普通”端口(目前我想不出更好的名称)。您将向控制端口发送控制消息,以指示“在进一步通知之前,将正常端口上的所有传入连接重定向到端口nnnn”。这避免了操作客户端协议 我对C#了解不够,无法提供有关C#解决方案的建议,但在Java中,我只想做如下事情:
while (true) {
acceptConnectionOnNormalPort()
connectToTargetPort()
startThreadCopyingDataFromAcceptedPortToTargetPort()
startThreadCopyingDataFromTargetPortToAcceptedPort()
}
您无法轻松扩展到数千个连接…是的,可以中继一个插座。 你可以使用TURN 有些程序库/应用程序:
- pjnath
- turnserver.sourceforge.net
- pjnath
- turnserver.sourceforge.net
-L
和-R
选项在一台机器上打开侦听端口,并将连接转发到另一台机器上的端口