2011-03-16 135 views
0

好,所以此刻我正在嘗試創建一個Android遊戲,我有一個線程運行,這很好。Android的UDP套接字 - 接收「垃圾」

但是我不確定如何確定傳入緩衝區大小以及如何讀取它。

目前,這是我的代碼:

 if(!thisPlayer.isHost) 
     { 

      byte[] incMsg = new byte[64]; 
      try { 
       socket = new DatagramSocket(port); 
       //socket.setSoTimeout(10); 
       DatagramPacket packet = new DatagramPacket(incMsg, incMsg.length); 
       socket.receive(packet); 
       Log.d("Receiving Game Message", "Received"+incMsg.toString()); 
      } catch (UnknownHostException err) { 
       Log.e("", "", err); 
      } catch (Exception err) { 
       Log.e("", "", err); 
      } 
      testString = incMsg.toString(); 
     } else { 
      byte[] msg = "Game On".getBytes(); 
      try { 
       String compIP = "192.168.1.102"; 
       String ip; 
       if(thisPlayer.ipAddress.equals(compIP)) 
        ip = "192.168.1.107"; 
       else 
        ip = compIP; 
       InetAddress sendingIP = InetAddress.getByName(ip); 
       socket = new DatagramSocket(port); 
       DatagramPacket p = new DatagramPacket(msg, msg.length, sendingIP, 5130); 
       socket.send(p); 
       Log.d("Sending Game Message", "Sent"); 
       socket.close(); 
      } catch (UnknownHostException err) { 
       Log.e("", "", err); 
      } catch (Exception err) { 
       Log.e("", "", err); 
      } 
     } 
     socket.close(); 

這類作品。主機正在發送數據。客戶端正在接收數據(我已經註釋掉了sotimeout,線程仍在繼續,所以我知道它的接收數據)。

我將字節[]轉換爲字符串,然後顯示它。然而,顯示的是「[B @ 448xxxx」,其中xxxx是一系列重複的數字/字母。

不幸的是,我到了沮喪的地步,現在頭腦發呆,無法想象我的生活出現了哪些問題。

TIA

p.s.我甚至嘗試使接收的字節數組與傳出的大小相同,但沒有任何運氣:/

回答

0

據我所知,這意味着指向字節數組的指針。您不能僅將其分配給字符串,而應使用(new String(inMsg))。 此外,由於您未初始化數組,因此您將在收到數據後收到垃圾(如果比數組短)。

+0

感謝這工作。我改變了 - > testString = new String(packet.getData());並完全刪除incMsg。 – Olly 2011-03-16 21:13:59

+0

@MByD是否有可能完全避免垃圾數據 – 2015-09-22 08:47:31