【问题标题】:Fixing java.net.BindException: Address already in use: JVM_Bind修复 java.net.BindException:地址已在使用:JVM_Bind
【发布时间】:2015-08-13 02:02:12
【问题描述】:

我正在创建一个具有 1 个服务器和多个客户端的程序。所以我想做的是接受任何传入的客户端连接到同一个端口,但是当我这样做时,我得到了异常:java.net.BindException: Address already in use: JVM_Bind

我还试图跟踪每个单独的客户端,以便我可以向单个客户端发送消息,因此我想在连接后将套接字添加到 ArrayList。

private static ServerSocket socket;
private static ArrayList<Socket> arraySocket = new ArrayList<Socket>();


...


    public static void StartServer() {

                while(true){
                //for (int i = 0; i < Main.nucs.size(); i++) {
                    try {
                        socket = new ServerSocket(Constants.PORT_NUMBER);  
                        socket.setReuseAddress(true);
                        Logger.Log("Waiting for first client");
                        arraySocket.add(socket.accept());
                        Logger.Log("New Client: " + arraySocket.get(count).getInetAddress().toString());
                        (new Thread(new ClientHandler(arraySocket.get(count)))).start();
                        count++;
                    } catch (IOException e) {
                        Logger.Log("Server:IOException:e: " + e);
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException ex) {
                            java.util.logging.Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    }
                }

    }

【问题讨论】:

  • 您不能多次使用同一个端口号。你也不能使用已经在使用的端口号

标签: java sockets


【解决方案1】:

似乎你想听一次并接受很多次 - 可能是这样的:

public static void StartServer() {

            socket = new ServerSocket(Constants.PORT_NUMBER);  
            socket.setReuseAddress(true);
            Logger.Log("Waiting for first client");

            while(true){
                try {
                    arraySocket.add(socket.accept());
                    Logger.Log("New Client: " + arraySocket.get(count).getInetAddress().toString());
                    (new Thread(new ClientHandler(arraySocket.get(count)))).start();
                    count++;
                } catch (IOException e) {
                    Logger.Log("Server:IOException:e: " + e);
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException ex) {
                        java.util.logging.Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            }

}

【讨论】:

    猜你喜欢
    • 2018-03-12
    • 2015-10-30
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    相关资源
    最近更新 更多