如何在java代码中为数据报套接字设置重用地址选项?
在我的应用程序中,将有一个线程始终在运行,并将发送或侦听某个端口 此应用程序在后台运行。有时,在创建套接字时,我发现以前由同一线程使用的端口在套接字的close()上没有被释放。所以我试着这样做如何在java代码中为数据报套接字设置重用地址选项?,java,android,sockets,exception,Java,Android,Sockets,Exception,在我的应用程序中,将有一个线程始终在运行,并将发送或侦听某个端口 此应用程序在后台运行。有时,在创建套接字时,我发现以前由同一线程使用的端口在套接字的close()上没有被释放。所以我试着这样做 dc = new DatagramSocket(inetAddr); dc.setReuseAddress(true); 问题是,它还没有到达第二条线。在第一行中,我得到了expectionBindException:Address已在使用中 有谁能帮我处理这种情况
dc = new DatagramSocket(inetAddr);
dc.setReuseAddress(true);
问题是,它还没有到达第二条线。在第一行中,我得到了expectionBindException:Address已在使用中
有谁能帮我处理这种情况吗
有没有办法释放端口
谢谢和问候,
SSuman185使用多播套接字
。构造它时不带任何参数。隐式调用setReuseAddress(true)的。然后调用bind()
现在调用setReuseAddress()太晚了,它无法发挥任何作用。DatagramSocket(inetAddr)
绑定到端口。在绑定之前,您需要设置reuseaddress(true)
要做到这一点。。。使用以下命令:
dc = new DatagramSocket(null);
dc.setReuseAddress(true);
dc.bind(inetAddr);
此构造函数使端口保持未绑定状态。这就是它对我的工作方式:
try {
clientMulticastSocket = new MulticastSocket(null);
clientMulticastSocket.setReuseAddress(true);
clientMulticastSocket.bind(new InetSocketAddress(multicastHostAddress, multicastPort));
clientMulticastSocket.joinGroup(multicastHostAddress);
} catch (IOException e) {
e.printStackTrace();
return false;
}
看看我编辑过的答案。谢谢,我试过了,但有疑问吗?我注意到,当我创建不带参数的DatagramSocket()时,它会绑定到某个空闲端口号。设置重用地址和绑定后,将绑定到新端口。老港口怎么了?@SSuman185正确,位置很好。您必须创建一个多播套接字。你可以像DatagramSocket一样使用它,DatagramSocket的默认构造函数在大约15年前被错误设计了。@Suman我已经解释过了。构造一个没有参数的多播套接字。你不明白其中的哪一部分?这里的inetAddr代表了什么?!!这帮了大忙!谢谢你,@poy!InetSocketAddress addr=新的InetSocketAddress(“localhost”,55562);