在使用即时消息应用程序(如Live Messenger或Google Talk的桌面客户端)时,计算机之间可以传输文件。我不能肯定,但我相当确定,电脑之间传输的数据不会通过微软或谷歌的即时通讯服务器,而是两台安装了即时通讯软件的电脑直接相互通信。我想知道客户端之间的这种直接连接是否或如何建立,以及我自己如何实现类似的东西。
我有一些使用个人网络的经验,但我只了解客户机-服务器的关系,在这种关系中,服务器总是在监听(并且端口不会被防火墙阻止),每当需要数据时,客户机都会向服务器发出请求。
发布于 2009-08-19 16:30:36
我使用过一个名为Hamachi的程序,它有点像点对点的vpn (虚拟网络对网络)。然后,我按原样编写了客户端服务器应用程序。这是一种快速获得通过Internet连接的功能的方法,而无需使用NAT路由器所需的技巧。
如果你需要“恰当地”做这件事,那么常用的方法之一就是udp hole punching。当你发送一个web请求时,你的防火墙就知道需要返回数据作为响应。诀窍是客户端A和客户端B都与Internet上的服务器联系。服务器将客户端A发出的请求的细节传递给客户端B,反之亦然。一旦建立了初始连接,即使主服务器不在那里,它们也可以继续通信。
发布于 2009-08-19 16:08:21
有一种方法被许多客户端使用,称为“针孔”:
我向您发送UDP数据包,这会在我的防火墙上戳一个洞(允许UDP数据包由您发送并由我接收,假定UDP数据包由我的防火墙响应)。该数据包将被您的防火墙丢弃。
你给我发了个UDP数据包,在你的防火墙上戳了个洞。该数据包应该会到达我,在这一点上,我可以发送另一个到达您,我们可以通信,通过我们的防火墙,通过UDP。
发布于 2009-08-19 15:59:12
如果我要实现这个,我会考虑几个选项。
简而言之,会话中至少有一方需要对另一方(服务器)可见,这样他们才能连接到服务器。无论如何,一旦建立了连接,客户端和服务器将能够来回通信,而不会出现任何问题。
https://stackoverflow.com/questions/1300898
复制相似问题