有三台计算机,服务器-A客户端-B和服务器-C。所有都通过TCP / IP连接。计算机服务器-A和客户端-B位于防火墙后面,只能进行外部连接。计算机服务器-C可以监听和连接。
Server-A和server-C将运行我的程序,因此可以监听和连接,至少我可以编程它们这样做。在Client-B上运行的软件只能连接。
我想从Client-B直接连接到Server-A。由于防火墙,我无法创建从Client-B到Server-A的直接连接(也没有相反的方式)。但我可以让Client-B和Server-A连接到Server-C。
为了实现这一点,我可以在Server-C上创建一个代理,它只是将数据包从Client-B转发到Server-A(反之亦然),但我不想这样做 - 我想直接Client-B和Server-A之间的连接。
我的问题是,在某种程度上,Server-C可以操作IP数据包,因此Server-C最初只需要两个连接,但可以“连接”两个套接字流,以便它们可以直接发送数据包到彼此?
一个通用的例子是;家用电脑想要将一些音乐文件发送到计算机C.它们都在防火墙/路由器/后面。所以他们只能连接到端口80上的某个服务器B.现在我希望服务器B做一些魔术,这样音乐文件就不会通过服务器B发送,而是直接从A发送到C ......
非常感谢任何帮助或提示!
答案 0 :(得分:0)
如果Server-A和Client-B位于NAT后面,则可以使用hole punching方法。
如果没有NAT,那么通过server-C进行tcp隧道并不是一个坏主意。