2013-06-04 317 views
1

所以我嘗試創建一個簡單的服務器客戶端應用程序。服務器客戶端簡單程序

我有服務器,哪些多播消息給訂閱的客戶端。

客戶可以明顯地訂閱或取消訂閱。

這裏是插座

try // create DatagramSocket for sending and receiving packets 
    { 
    socket = new DatagramSocket(6666); 
    } // end try 
    catch (SocketException socketException) 
    { 
    System.exit(1); 
    } // end catch 

服務器端的代碼,我也創建了等待進入的口袋

 while(true) 
     { 
      try // receive packet, display contents, return copy to client 
      { 
       byte[] data = new byte[ 100 ]; // set up packet 
       DatagramPacket receivePacket = 
        new DatagramPacket(data, data.length); 

       socket.receive(receivePacket); // wait to receive packet 

       String Message = receivePacket.getData().toString(); 
......... 

這裏一個線程客戶端

try { 
     socket = new DatagramSocket(); 
    } catch (SocketException ex) { 
     displayArea.append(ex + "\n"); 
    } 

我在這裏嘗試發送數據包

 byte[] data = message.getBytes(); // convert to bytes 

     try { 
      // create sendPacket 
      DatagramPacket sendPacket = new DatagramPacket(data, 
       data.length, InetAddress.getLocalHost(), 6666); 
     } catch (UnknownHostException ex) { 
      displayArea.append(ex + "\n"); 
     } 

嗯,問題是我不認爲數據包到達服務器,我知道線程正在等待數據包,我可以在調試中看到它確實到達了socket.receive部分,但是沒有任何反應。

我在同一臺計算機上使用客戶端和服務器。

任何想法我做錯了什麼?

謝謝。

+0

我會使用數據包嗅探器來查看數據包是否在您的盒子上收到。 Wireshark,tcpdump等。 – Gray

+0

小心:Windows上的Wireshark無法觀察環回 – Aubin

回答

0
byte[] data = message.getBytes(); // convert to bytes 
try { 
    DatagramPacket sendPacket = 
     new DatagramPacket(data, data.length, InetAddress.getLocalHost(), 6666); 

    socket.send(sendPacket); //<<<<<<<<<<<<<<<<<<< REQUIRED 

} 
catch(UnknownHostException ex) { 
    displayArea.append(ex + "\n"); 
} 
+0

謝謝,我的包... –