使用Live Messenger等即时消息应用程序或Google Talk桌面客户端时,计算机可以相互之间传输文件.我不能肯定地说,但我相当确定在计算机之间传输的数据不通过Microsoft或Google的IM服务器,而是使用IM软件的两台计算机直接相互通信.我想知道是否或如何建立客户端之间的直接连接以及我将如何实现类似的东西.
我有一些使用个人网络的经验,但我只了解客户端 - 服务器关系,服务器总是在监听(端口不被防火墙阻止),客户端在需要数据时向服务器发出请求.
许多客户使用的方法称为"针孔":
我发送了一个UDP数据包,它在我的防火墙上打了一个洞(允许UDP数据包,假设是我的防火墙的响应,由你发送并由我收到).该数据包被防火墙丢弃.
您向我发送UDP数据包,在防火墙上戳了一个洞.该数据包应该到达我,此时我可以发送另一个数据包到达您,我们可以通过我们的防火墙通过UDP进行通信.
我使用了一个名为Hamachi的程序,它有点像点对点的VPN(虚拟网络到网络).然后我按原样编写了客户端服务器应用程序.这是一种快速的方法来获得通过Internet连接的功能,而无需处理NAT路由器所需的技巧.
如果你需要'正确',其中一种常见的方法是udp打孔.当您发送Web请求时,您的防火墙会知道希望返回数据作为响应.诀窍是客户端A和客户端B都联系Internet上的服务器.服务器将请求客户端A的详细信息传递给客户端B,反之亦然.一旦建立初始连接,即使主服务器不再存在,它们也可以继续通信.