[英]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.