2012-05-24 233 views
1

我是一个非常简单的问题。我实现了一个系统,而无需使用它们之间的直接连接在哪里可以发送两个客户端之间的数据(不包括在客户端上打开防火墙端口),以下这种模式:Winsock + C +客户端到客户端+发送和接收数据

客户端1 ------>服务器--- --->客户端2 或者 客户端1 < ------服务器< ------客户端2

没有什么错这个模型一个好的工作。问题是服务器上的开销大大增加,因为它需要从客户端接收数据,然后立即转到下一个。

我的问题:有没有给客户之间发送数据的速度更快的方式?或者将数据从客户端发送到另一个,而不使用它们之间的直接连接?

回答

0

1 - 你的问题似乎并没有有什么用C/C++/winsock的。

2 - 你可能做的最好的方式,现在,随着负载的增加你只需要扩展你的服务器(而不是让可怕的复杂的客户端试图连接点对点)

+0

感谢您的回复。我在看“UDP孔冲孔”,这似乎很简单,可以实施。唯一的问题是我需要保持一定的完整性来发送/接收数据,因为我正在开发的软件是一个shell,命令必须以正确的顺序发送,并且下载/上传文件必须准确无误。 –

+0

因此,对于使用“TCP孔打孔”的情况,这会更有趣。假设我使用这种方法,我需要一个服务器S和两个客户:C1,C2。 C1和C2连接到S上.S标识客户端的地址,然后发送每个客户端的信息,然后客户端相互知道。 我不明白这整个过程如下:如何在客户端与其他连接,如果客户端已连接到服务器,他们的门都锁上了? –

1

在客户端与中央服务器的帮助之间建立直接连接是可能的,但不是微不足道的。这称为Nat Traversal,并通过使用“伪造”UDP数据包在防火墙中打孔来工作。这项技术是Skype开创的(或至少是最前沿的)技术。
请参阅Wiki文章以获取链接以及其工作原理的总体概述。

+0

感谢您的回复。我在看“UDP孔冲孔”,这似乎很简单,可以实施。唯一的问题是我需要保持一定的完整性来发送/接收数据,因为我正在开发的软件是一个shell,命令必须以正确的顺序发送,并且下载/上传文件必须准确无误。 –

+0

因此,对于使用“TCP孔冲孔”的案例来说,这会更有趣。假设我使用这种方法,我需要一个服务器S和两个客户:C1,C2。 C1和C2连接到S上.S标识客户端的地址,然后发送每个客户端的信息,然后客户端相互知道。 我不明白这整个过程如下:如何在客户端与其他连接,如果客户端已连接到服务器,他们的门都锁上了? –

相关问题