2013-05-05 120 views
0

我想使用此代碼Alllocate正確的字節數組大小

public static Socket connectToSocket(String name) 
    { 
     try 
     { 
      while(true) 
      { 
       byte[] receiveData = new byte[name.length()]; 
       DatagramSocket clientSocket = new DatagramSocket(PORT); 
       DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); 
       clientSocket.receive(receivePacket); 

       if(Arrays.equals(name.getBytes(),receiveData)) 
       { 
        return new Socket(receivePacket.getAddress(),PORT); 
       } 
      } 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
      return null; 
     } 
    } 

連接到插座,但我的問題是,我點知道做什麼大小我的字節數組進行處理的所有信息。我試圖讓receiveData數組的大小很大,但是我意識到這不會起作用,因爲它會弄亂這個聲明。

 if(Arrays.equals(name.getBytes(),receiveData)) 

什麼是解決此問題的最佳方法。

+0

只是fyi,這不會編譯,因爲有可能你沒有達到return語句。 – lekroif 2013-05-05 23:31:50

+0

實際上它編譯得很好java不檢查那個 – 2013-05-05 23:32:35

+0

你可以寫入一個'ByteArrayOutputStream'來代替。有什麼方法可以在數據尚未完成時處理數據? – 2013-05-05 23:34:03

回答

0

DatagramPacket包含實際收到的數據的長度。請參閱'length()'方法。

但我很好奇這個協議。爲什麼不用TCP連接到服務器並詢問它的名字?並完全消除UDP部分?

+0

,因爲當我只是普通的TCP使用我似乎無法連接到外部計算機,我認爲這可能有所幫助,但我還沒有能夠測試它,我將如何使用該對象的構造函數中的對象的長度方法。 – 2013-05-05 23:54:14

+0

'if(name.equals(new String(packet.getData(),0,packet.getLength())')但是UDP不能解決TCP連接問題,如果無法連接, 。 – EJP 2013-05-06 00:02:51