fre*_*crs 16 java bittorrent tcp
我正在尝试用Java共享原型/软件的p2p文件.我有兴趣学习使用socket,所以不,我不会使用JXTA或任何类型的API.
我读过关于TCP打孔的内容,它可能不适用于所有NAT类型.但我可以看到Gnutella和BitTorrent总是适用于我尝试的每台机器/ NAT.那么他们是否使用TCP Hole Punching来启动主机之间的连接?
此外,像这样的代码会进行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);
Run Code Online (Sandbox Code Playgroud)
经过我的研究,我发现 TCP 不适合绕过 NAT,并且 TCP 打洞技术也不是 100% 成功的技术。
最好的方法是使用 UDP 并在其上实现容错层,以便它像 TCP 一样工作。
还有一些 API,例如 Java 的 UDT。但我还没有尝试 http://sourceforge.net/projects/udt-java/
| 归档时间: |
|
| 查看次数: |
2831 次 |
| 最近记录: |