2016-04-27 16 views
0

我在做一個簡單的客戶端服務器程序。當客戶端發送字符串「開始」時,我希望服務器開始執行一些代碼。現在,我讓客戶端發送一個包含消息「start」的數據報文件,服務器從數據包中獲取字節緩衝區,將其轉換爲字符串,然後將該字符串值與字符串文字「start」進行比較。很顯然,我做錯了什麼,因爲我的代碼不會進入的if(sentence.equals(start){ System.out.println("ok");}如何正確比較從數據報包接收到的字符串值?

我的代碼for循環:

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


    byte[] receiveData; 
    byte[] sendData; 
    DatagramSocket serverSocket = new DatagramSocket(2014); 


    while(true){ 

     receiveData = new byte[15]; 
     DatagramPacket frame = new DatagramPacket(receiveData, receiveData.length); 
     serverSocket.receive(frame); 
     InetAddress IPaddress = frame.getAddress(); 
     System.out.println("INET " + IPaddress); 


     byte[] data; 

     int port = frame.getPort(); 
     System.out.println("port " + port); 

     String sentence = new String(frame.getData()); 
     String start = new String("start"); 


     System.out.println("RECEIVED FROM CLIENT: " + sentence); 


     if(sentence.equals(start)){ 
      System.out.println("ok"); 
     } 
    } 
} 
+0

所以'句子'顯然不是''開始''。當你打印出來時,你看到了什麼? – azurefrog

+0

你確定它甚至收到任何東西? 'DatagramSocket.receive'將永遠阻塞,直到它收到一些東西。 –

+0

是的,這是開始....這是打印出來,當我打印出來。這就是我困惑的原因。 – LePerMu

回答

2

進行以下更改。

String sentence = new String(frame.getData(), 0, frame.getLength()); 
+0

謝謝你的工作!爲什麼我必須用這兩個額外的參數來初始化字符串?我不明白爲什麼它不會以其他方式工作。 – LePerMu

+0

@LePerMu它不工作的另一種方式,因爲你的緩衝區長度比單詞「開始」(這是所有數據發送)的長度 –

+0

@DonRhummy但我想.getData()自動'切斷'的字節那沒用過? – LePerMu