java - 即使使用 setReuseAddress(true) 也会发生绑定(bind)错误

标签 java sockets

也许我误解了这段代码的用途,但据我了解,调用 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();
        }
    }
}

最佳答案

关于java - 即使使用 setReuseAddress(true) 也会发生绑定(bind)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42786546/

相关文章:

c++ - 发送错误 : Invalid argument

java - 每次运行 Android 应用程序都会崩溃

使用 org.reflections 在 JAR 文件中找不到 Java 注释

java - 运行 java 分析器

java - UDP 打洞 Java 示例

基于 Java 的支持流水线的 HTTP 客户端

java - 使用 MySQL 数据库中的数据填充 LocalDateTime 数组时遇到问题

java - 如何将自定义 JTable 代码添加到 GUI Builder Netbeans?

c++ - 在 2 个线程中 boost 套接字

android - 在 Android 中发布和获取的 HttpsURL 连接