也许我误解了这段代码的用途,但据我了解,调用 setReuseAddress(true) 将允许使用该端口,即使计算机仍然认为该端口正在使用中。
场景:我有以下代码。当它崩溃时,它不会关闭端口,因此它会在下次启动时引发绑定(bind)错误。我已使用 setReuseAddress(true) 尝试强制它打开端口,但它引发了相同的错误。如果这是正确的代码,我该如何使用它?如果代码错误,什么会允许这种行为?
import java.io.IOException;
import java.io.PrintWriter;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;
public class ServerPsswd {
public static void main(String[] args) throws IOException {
ServerSocket listener = new ServerSocket();
listener.setReuseAddress(true);
listener.bind(new InetSocketAddress(9090));
try {
while (true) {
Socket socket = listener.accept();
try {
PrintWriter out =
new PrintWriter(socket.getOutputStream(), true);
out.println("tada!");
out.println("yays");
} finally {
socket.close();
}
}
}
finally {
listener.close();
}
}
}
最佳答案
https://docs.oracle.com/javase/7/docs/api/java/net/Socket.html#setReuseAddress(boolean)
当前连接关闭后,在超时时间内允许连接
关于java - 即使使用 setReuseAddress(true) 也会发生绑定(bind)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42786546/