如何在java代码中为数据报套接字设置重用地址选项?

Sum*_*man 7 java sockets android exception

在我的应用程序中,将有一个线程始终在运行,并将发送或侦听某个端口.

此应用程序在后台运行.有时在创建套接字时,我发现之前由同一个线程使用的端口没有在套接字的close()上释放.所以我试着这样

        dc = new DatagramSocket(inetAddr);
        dc.setReuseAddress(true);  
Run Code Online (Sandbox Code Playgroud)

问题是,它也没有到达第二行.在第一行本身我得到了解释BindException: Address already in use.

谁能帮助我如何处理这种情况.

有没有办法释放端口?

谢谢和问候,
SSuman185

poy*_*poy 14

DatagramSocket(inetAddr)绑定到端口.你需要setReuseAddress(true)在绑定之前.

为此...使用以下内容:

dc = new DatagramSocket(null);
dc.setReuseAddress(true);
dc.bind(inetAddr);
Run Code Online (Sandbox Code Playgroud)

此构造函数使端口保持未绑定状态.


use*_*421 7

用一个MulticastSocket.构造它没有参数.这隐式调用setReuseAddress(true).然后调用bind().

目前你调用setReuseAddress()太晚了,它没有做任何好事.