2016-02-23 67 views
0

我有一个服务器项目和一个客户端项目。当服务器运行从客户端的第一个连接正常工作。在第二次连接时,服务器会触发“java.net.BindException:已在使用的地址:JVM_Bind”错误。有没有办法在同一端口上添加更多连接?java.net.BindException:已在使用的地址:JVM_Bind多客户端服务器

服务器:

public class Main { 

public static void main(String[] args) throws IOException, ClassNotFoundException { 

    Socket pipe = null; 
    while(true){ 

    ServerSocket s = new ServerSocket(2345); 
    pipe = s.accept(); 

    Connection c = new Connection(pipe); 
    c.start(); 

    } 
} 

}

public class Connection extends Thread{ 

private Socket socket = null; 

Mensch jim = null; 
ObjectInputStream input = null; 
ObjectOutputStream output = null; 
ServerSocket s = null; 

public Connection(Socket s){ 
    socket = s; 
} 
    public void run(){ 
     try { 
     input = new ObjectInputStream(socket.getInputStream()); 
     output = new ObjectOutputStream(socket.getOutputStream()); 

     jim = (Mensch) input.readObject(); 
     jim.setAge(33); 

     output.writeObject(jim); 

     input.close(); 
     output.close(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } 

}}

和客户端:

public class Main { 

public static void main(String[] args) { 
    Mensch jim = new Mensch(19, "Jim"); 

    System.out.println(jim.getAge()); 
    try { 
     Socket s = new Socket("127.0.0.1", 2345); 

     ObjectOutputStream clientOutputStream = new ObjectOutputStream(s.getOutputStream()); 
     ObjectInputStream clientInputStream = new ObjectInputStream(s.getInputStream()); 

     clientOutputStream.writeObject(jim); 



     jim = (Mensch) clientInputStream.readObject(); 

     System.out.println(jim.getAge()); 

     clientOutputStream.close(); 
     clientInputStream.close(); 


    } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
    } catch (UnknownHostException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

}

回答

4

这就是问题所在:

while(true) { 
    ServerSocket s = new ServerSocket(2345); 
    pipe = s.accept(); 
    ... 
} 

你试图重复地结合到同一个端口。您需要做的只是创建一个单一的ServerSocket并多次呼叫accept。 (我也想移动pipe变量声明内循环...)

ServerSocket s = new ServerSocket(2345); 
while(true) { 
    Socket pipe = s.accept(); 
    ... 
} 
+0

啊谢谢老兄! – CampingCow

相关问题