Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NAT遍历/HolePunching TPC的Java实现_Java_Android_Tcp_P2p_Hole Punching - Fatal编程技术网

NAT遍历/HolePunching TPC的Java实现

NAT遍历/HolePunching TPC的Java实现,java,android,tcp,p2p,hole-punching,Java,Android,Tcp,P2p,Hole Punching,我一直在浏览和搜索路由器后面的两个客户端的对等TCP连接的实现,但我得到的一切都变得更加混乱 我的情况有点简单,因为我已经知道双方的本地和公共IP地址 所以,在这一点上,我不需要使用第三台服务器来发现这些信息 客户A:LocalIP=192.168.0.1,PublicIP=A.A.A.A 此客户端将侦听端口pppp上的连接 serverSocket = new ServerSocket("pppp"); serverSocket.setSoTimeout(timeOut); socket =

我一直在浏览和搜索路由器后面的两个客户端的对等TCP连接的实现,但我得到的一切都变得更加混乱

我的情况有点简单,因为我已经知道双方的本地和公共IP地址

所以,在这一点上,我不需要使用第三台服务器来发现这些信息

客户A:LocalIP=192.168.0.1,PublicIP=A.A.A.A

此客户端将侦听端口pppp上的连接

serverSocket = new ServerSocket("pppp");
serverSocket.setSoTimeout(timeOut);
socket = ClientA.serverSocket.accept();*
SocketAddress sockaddr = new InetSocketAddress("a.a.a.a", "pppp");
socket.connect(sockaddr, timeOut);
客户B:LocalIP=10.10.0.1,PublicIP=B.B.B.B

此客户端将尝试连接到端口pppp上的客户端A

serverSocket = new ServerSocket("pppp");
serverSocket.setSoTimeout(timeOut);
socket = ClientA.serverSocket.accept();*
SocketAddress sockaddr = new InetSocketAddress("a.a.a.a", "pppp");
socket.connect(sockaddr, timeOut);

当然,这是行不通的,因此,考虑到这些信息,如何进行

这正是nat遍历所做的。它欺骗了路由器!正如您提到的打孔,您需要实现类似的协议处理机制,该机制使用不同的源IP重写IP数据包,并将其转发到目的地,作为在第三方服务器上使用公共IP的请求响应,这实际上会欺骗路由器。基本上,您必须详细讨论RFC以实现此协议。我也找不到任何可用于此目的的库