[英]Android UDP Socket - Receiving “Garbage”
好的,因此在我嘗試創建一個Android游戲時,我正在運行一個很好的線程。
但是我不確定如何確定傳入緩沖區的大小以及如何讀取它。
目前,這是我的代碼:
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();
這種作品。 主機正在發送數據。 客戶端正在接收數據(我已注釋掉超時並繼續運行線程,因此我知道它正在接收數據)。
我將byte []轉換為字符串,然后顯示它。 但是,顯示的是“ [B @ 448xxxx””,其中xxxx是一系列重復的數字/字母。
不幸的是,我快要沮喪了,現在腦袋發白了,無法為我的生命思考我哪里出了問題。
TIA
ps我什至嘗試使接收字節數組的大小與輸出字節數組的大小相同,而沒有任何運氣:/
據我所知,這意味着一個指向字節數組的指針。 您不能只是將其分配給string,而是使用(new String(inMsg))
。 另外,由於未初始化數組,因此在接收到的數據之后(如果比數組短)會收到垃圾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.