草庐IT

setReuseAddress

全部标签

java - Linux 上的 TCP 打洞和 setReuseAddress()

我正在开发一个涉及基于TCP的P2P通信的Java客户端/服务器应用程序。我正在尝试按照此处所述实现TCP打洞:http://www.brynosaurus.com/pub/net/p2pnat/#sec-tcp.这需要同时监听并尝试使用相同的本地TCP端口建立传出连接。显然,如果使用SO_REUSEADDR套接字选项,这应该可以工作,我通过Java中的setReuseAddress()方法进行设置。但是,这并不像我预期的那样有效。这是一些测试代码:importjava.io.IOException;importjava.net.*;publicclassTest{publicstat

java - Android,setReuseAddress 不起作用

我看过关于这个问题的其他答案,但他们大多声明在绑定(bind)套接字之前调用setReuseAddress(true)。但我正在这样做,但仍然不起作用,有人可以帮我解决这个问题吗?SocketChanneltunnel=SocketChannel.open();if(!protect(tunnel.socket())){thrownewIllegalStateException("Cannotprotecttunnel");}Log.i("TAG","test");tunnel.socket().setReuseAddress(true);tunnel.socket().bind(ne