好的,所以在我尝试创建Android游戏的那一刻,我有一个Thread运行,这很好。
但是我不确定如何确定传入缓冲区大小的大小以及如何读取它。
目前这是我的代码:
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并且线程继续,所以我知道它的接收数据。)
我将byte []转换为字符串然后显示它。然而,显示的是“[B @ 448xxxx”,其中xxxx是一系列重复的数字/字母。
不幸的是,我已经达到了沮丧的程度,现在脑子变得模糊不清,无法想到我出错的生活。
TIA
P.S。我甚至尝试使接收字节数组与传出的大小相同,没有任何运气:/
答案 0 :(得分:0)
据我所知,这意味着指向字节数组的指针。您不能只将其分配给字符串,而是使用(new String(inMsg))
。
此外,由于您没有初始化数组,因此在收到数据后(如果比数组短),您将收到垃圾。