【发布时间】:2012-06-19 22:11:49
【问题描述】:
我正在尝试按照本文http://www.brynosaurus.com/pub/net/p2pnat/ 中的描述对 NAT 的 TCP 打孔进行原型设计。
我有一段简单的代码尝试在特定本地端口上打开与服务器的连接。我正在尝试在公共服务器上观察 NAT 是否将两个连接都映射到同一个 NAT 映射。
int localPort = getFreeLocalPort();
while (true) {
Socket connection = new Socket(_publicServerHost,_publicServerPort,
getLocalSocketAddress(), localPort);
connection.setReuseAddress(true);
connection.close();
}
第一次连接正常。但是第二次尝试它会引发异常:
为打孔选择的本地端口:65416
2012-06-17 15:55:21,545 错误 - 地址已在使用中:连接
2012-06-17 15:55:25,175 调试 - 详细信息: java.net.BindException:地址已在使用:连接 在 java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.6.0_24] 在 java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351) ~[na:1.6.0_24] 在 java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213) ~[na:1.6.0_24] 在 java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200) ~[na:1.6.0_24] 在 java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) ~[na:1.6.0_24] 在 java.net.Socket.connect(Socket.java:529) ~[na:1.6.0_24] 在 java.net.Socket.connect(Socket.java:478) ~[na:1.6.0_24] 在 java.net.Socket.(Socket.java:375) ~[na:1.6.0_24] 在 java.net.Socket.(Socket.java:249) ~[na:1.6.0_24]
【问题讨论】:
标签: java networking network-programming hole-punching