2013-02-08 38 views
0

我想在Java TCP程序中接受多個客戶端。所以我使用了一個while循環來接受多個客戶端。但問題是我無法隨機連接節點和服務器。我曾經依次連接客戶端。那麼如何使用switch case隨機地將節點與我的服務器連接?在Java中接受多個客戶端TCP

while循環:

int port=7000; 

while(true) 
{ 
    try 
    { 
     node1=new ServerSocket(port+10); 
     Socket check1=node1.accept(); 
     System.out.println("CLIENT A IS CONNECTED"); 
    } 
    catch(Exception e) 
    { 
     System.out.println(e); 
    } 

    try 
    { 
     ServerSocket soc2=new ServerSocket(port+20); 
     Socket check2=soc2.accept(); 
     System.out.println("CLIENT B IS CONNECTED"); 
    } 
    catch(Exception e) 
    { 
     System.out.println(e); 
    } 

    try 
    { 
     node3=new ServerSocket(port+30); 
     Socket check3=node3.accept(); 
     System.out.println("CLIENT C IS CONNECTED"); 
    } 
    catch(Exception e) 
    { 
     System.out.println(e); 
    } 

    try 
    { 
     node4=new ServerSocket(port+40); 
     Socket check4=node4.accept(); 
     System.out.println("CLIENT D IS CONNECTED"); 
    } 
    catch(Exception e) 
    { 
     System.out.println(e); 
    } 

    try 
    { 
     node5=new ServerSocket(port+50); 
     Socket check5=node5.accept(); 
     System.out.println("CLIENT E IS CONNECTED"); 
    } 
    catch(Exception e) 
    { 
     System.out.println(e); 
    } 

但是當我使用的時候我爲E客戶端連接它這個JavaNetBindexception發生。

+0

使您的類Runnable在每個run()實例中使用不同的'port'實例化'new ServerSocket(port)'。現在你的代碼變成了多個端口 – TheWhiteRabbit 2013-02-08 11:35:45

+0

OP沒有提到任何有關多個端口的信息。沒有答案。 – EJP 2013-02-08 20:29:07

回答

1
ServerSocket serverSocket = new ServerSocket(port); 
ArrayList<Socket> clients = new ArrayList<Socket>(); 
while (true) { 
    clients.Add(serverSocket.accept());   
} 

這個怎麼樣?但是你仍然需要幾個線程。

1
public class ThreadServer { 

    static class ServerThread implements Runnable { 
    Socket client = null; 
    public ServerThread(Socket c) { 
     this.client = c; 
    } 
    public void run() { 
     try { 
      System.out.println("Connected to client : "+client.getInetAddress().getHostName()); 
      client.close(); 
     } catch (Exception e) { 
      System.err.println(e.getMessage()); 
     } 
    } 
    } 
    public static void main(String args[]) { 
     try { 
      ServerSocket server = new ServerSocket(7000); 
      while (true) { 
       Socket p = server.accept(); 
       new Thread(new ServerThread(p)).start(); 
      } 
     } catch (Exception ex) { 
      System.err.println("Error : " + ex.getMessage()); 
     } 
    } 
}