2010-06-21 26 views
0

有三台计算机,server-A client-B和server-C。所有通过TCP/IP连接。计算机服务器A和客户端B位于防火墙后面,只能建立对外连接。计算机服务器C既可以监听也可以连接。通过一台服务器从防火墙后面进行两次连接 - 两个连接可以直接发送数据而无需通过服务器?

服务器-A和服务器-C将运行我的程序,因此可以监听和连接,至少我可以编程它们来这样做。在Client-B上运行的软件只能连接。

我想建立一个从客户端B到服务器A的直接连接。由于防火墙原因,我无法创建从客户端B到服务器A的直接连接(反之亦然)。但是我可以将Client-B和Server-A连接到Server-C。

为了得到这个工作,我可以在服务器C上创建一个代理服务器,它只是将数据包从客户端B转发到服务器A(另一种方式),但我不想这样做 - 我想要一个客户端B和服务器A之间的直接连接。

我的问题,是否有某种方式,Server-C可以操纵IP数据包,以便服务器C只是最初需要两个连接,但可以'连接'两个套接字流,以便他们可以直接发送数据包对彼此?

一个通用的例子是;家用电脑A想要将一些音乐文件发送到计算机C.两者都在防火墙/路由器/后面。所以他们只能连接到端口80上的一些服务器B.现在我想让服务器B做一些魔术,这样音乐文件不会通过服务器B发送,而是直接从A发送到C ...

任何帮助或提示非常感谢!

回答

0

如果Server-A和Client-B在NAT后面,则可以使用hole punching方法。

如果没有NAT,那么通过服务器C的TCP隧道并不是什么坏主意。

+0

是!这正是我需要的。当我们说话时,阅读NAT穿越和TURN协议。非常感谢提示。 干杯,Woporo – woporo 2010-06-23 00:41:06