BitTorrent和Gnutella在传输文件时使用什么来绕过NAT?
我正在尝试在Java中做一个p2p文件共享原型/软件。我有兴趣学习使用套接字,所以,不,我不会使用JXTA或任何类型的API。
我读过关于TCP打孔的文章,它可能不适用于所有NAT类型。但我可以看到Gnutella和BitTorrent总是在我尝试的每台机器/ NAT上工作。那么他们是否使用 TCP 打孔来启动主机之间的连接呢?
另外,像这样的代码会做TCP打孔吗?
final ServerSocket s = new ServerSocket(7777);
Thread t = new Thread(new Runnable(){
public void run() {
try
{
s.accept();
}
catch(Exception ex)
{
}
}
});
Socket sock = new Socket();
sock.connect(new InetSocketAddress("IP ADDRESS", 7777), 50000);