2011-03-16 139 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