2017-10-13 181 views
-2

我想創建一個使用UDP的客戶端和服務器聊天程序。我遵循一個使用TCP編寫類似程序的教程,並嘗試將我的知識轉化爲使用UDP以類似的方式創建一個。在Java中的UDP聊天

我已經完成了一個客戶端和服務器端都顯示沒有錯誤,並會運行,但一旦運行既不會消息對方或接收消息...有人可以幫助我看看我做錯了什麼?用於發送消息

服務器端:

try{ 
     //creates the packet to be sent 
     byte[] buf = new byte[256]; 
     String msgout = serverText.getText().trim(); 
     buf = msgout.getBytes(); 

     //uses the socet.receive method to get the packet to retrieve information to send 
     DatagramPacket packet = new DatagramPacket(buf, buf.length); 
     ss.receive(packet); 
     InetAddress address = packet.getAddress(); 
     int port = packet.getPort(); 

     //uses packet information to create and send packet 
     DatagramPacket packetSend = new DatagramPacket(buf, buf.length, address, port); 
     ss.send(packetSend); 

     //Displays the message in the chat area and clears the text area 
     serverArea.setText(serverArea.getText().trim()+"\n Server: "+msgout); 
     serverText.setText(""); 

    }catch (Exception e){ 

    } 

,然後主要用於設置插座和接收/打印:

String msgin = ""; 
    try{ 

     ss = new DatagramSocket(1420); // Sets socket at 1420 
     byte[] buf = new byte[256]; 
     DatagramPacket packet = new DatagramPacket(buf, buf.length); 
     ss.receive(packet); //Receives the packet from the socket 


     //Converts the byte array into a string 
     String clientMsg = new String(packet.getData(), 0, packet.getLength()); 

     while(!msgin.equals("exit")){ 
      //Displays the message 
      msgin = clientMsg; 
      serverArea.setText(serverArea.getText().trim()+"\n Client: "+msgin); //displays client message 

     } 

    }catch(Exception e){ 

    } 

下面是客戶端代碼,生病結合其發送和接收區域合併爲一個區塊:

try{ 
     //Creates the message out using the known socket that the Server creates and the known local address 
     String msgout = clientText.getText().trim(); 
     sendBuf = msgout.getBytes(); 
     InetAddress address = InetAddress.getLocalHost(); 
     DatagramPacket sp = new DatagramPacket(sendBuf, sendBuf.length, address, 1420); 
     s.send(sp); 

     //Displays the text and clears the text field 
     clientchat.setText(clientchat.getText().trim()+"\n Server: "+msgout); 
     clientText.setText(""); 


    }catch (Exception e){ 

    } 
String msgin = ""; 

    try{ 
     //Creates a socket 
     DatagramSocket s = new DatagramSocket(); 

     //Receives the message from the server 
     byte[] buf = new byte[256]; 
     DatagramPacket rp = new DatagramPacket(buf, buf.length); 
     s.receive(rp); 

     //Converts byte array to message 
     String clientMsg = new String(rp.getData(), 0, rp.getLength()); 

     while(!msgin.equals("exit")){ 
      //Displays the message 
      msgin = clientMsg; 
      clientchat.setText(clientchat.getText().trim()+"\n Server: "+msgin); //displays client message 

     } 


    }catch (Exception e){ 

    } 

任何幫助和提示將不勝感激!

+1

如果你有空的catch塊,當然你不會看到錯誤。 – Kayaman

回答

0

如果沒有任何事情發生,並且您無法發送/接收消息,則可能是有異常正在生成。

但是,由於您有一個try-catch塊來捕獲所有異常,並且什麼都不做,所以如果拋出異常,您將不知道拋出了什麼異常。

不是簡單地忽略例外,你至少應該打印他們的原因。

在您的catch語句中添加以下內容,您將能夠更輕鬆地進行調試。

e.printStackTrace(); 
+0

不幸的是,這沒有做任何事情,我的程序,它仍然沒有任何東西。即時消息只是不得不放棄它,我想,並嘗試從新開始。 – MDSasquatch