NAT遍历/HolePunching TPC的Java实现
我一直在浏览和搜索路由器后面的两个客户端的对等TCP连接的实现,但我得到的一切都变得更加混乱 我的情况有点简单,因为我已经知道双方的本地和公共IP地址 所以,在这一点上,我不需要使用第三台服务器来发现这些信息 客户A:LocalIP=192.168.0.1,PublicIP=A.A.A.A 此客户端将侦听端口pppp上的连接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 =
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以实现此协议。我也找不到任何可用于此目的的库