2012-04-22 206 views
-1

我在製作UDP客戶端/服務器程序。客戶端收集數據並將其發送到服務器。服務器在一個端口上接受多個UDP數據報的問題

客戶端發送特定UDP端口6789的客戶端和服務器上具有隨機的端口號與服務器的數據報然後使用隨機端口共享信息。

我的問題是,只有一個客戶端可以連接。我覺得這是因爲端口6789從未重新開放給下一個客戶端。

這僅僅是服務器接收端口的初始連接6789

public class MonitorServer extends Thread{ 

    public static void main(String[] args) { 

try{ 

    DatagramSocket connectSocket = new DatagramSocket(6789);  
    while(true) 
    { 
      String portString = ""; 
      int portInt = 0; 
      byte [] buffer = new byte[100]; 

System.out.println("portTest 01 " +portInt); 
      DatagramPacket portPacket = new DatagramPacket(buffer, buffer.length); 
      connectSocket.receive(portPacket); 
      portString = new String (portPacket.getData()); 
      connectSocket.disconnect(); 
      connectSocket.close(); 

System.out.println("portTest 02 " +portString); 
      portString = portString.replaceAll("[^0-9.,]+",""); 
      portInt = Integer.parseInt(portString); 

System.out.println("portTest 03 " +portString);      
      ClientConnection c = new ClientConnection(portInt); 
      new Thread(c).start(); 

System.out.println("portTest 04 " +portString); //<<-- never prints 
    } 
    } 

    catch (Exception e) {} 
} 

} 

好像這部分代碼只運行一次的代碼。我加System.outs來解決,它看起來像它停在:

  ClientConnection c = new ClientConnection(portInt); 
      new Thread(c).start(); 

System.out.println("portTest 04 "); //<-- Never prints 

我需要它保持運行,以接受連接。我究竟做錯了什麼?

回答

0

在你的代碼,MonitorServer.startServer不會返回,因爲它進入while循環無限的方法。這意味着MonitorServer的構造函數永遠不會返回,這意味着主循環中的while循環永遠不會到達close並永遠不會循環。你需要在新的ThreadExecutor Service

+0

感謝您的回答約翰,我拿出while循環,但相同的結果第一個客戶端連接,併發送數據。在第一個客戶端之後沒有其他客戶端可以連接 – Joshua 2012-04-22 20:35:59

+0

發佈更新後的代碼 – 2012-04-22 20:37:52

+0

發佈無while循環的代碼。 – Joshua 2012-04-22 20:47:24

0

開始MonitorServer你應該在5678創建套接字一次,接收外循環。不是每次你收到。

NB有沒有這樣的東西在UDP「connectig」,從有限的東西,DatagramSocket.connect()做,這是未知的對等分開。

+0

感謝您的建議,我在while循環之外創建了connectSocket。 while循環永遠不會過去「的新主題(C)。開始(); – Joshua 2012-04-22 23:16:07

+0

@Joshua它可能不會超出新ClientConnection(...),這將是因爲你是在構造函數中做一些阻塞的操作,應該在其run()方法中。 – EJP 2012-04-22 23:37:57

相關問題