Android UDP套接字 - 接收“垃圾”

时间:2011-03-16 21:04:55

标签: java android sockets udp bytearray

好的,所以在我尝试创建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。我甚至尝试使接收字节数组与传出的大小相同,没有任何运气:/

1 个答案:

答案 0 :(得分:0)

据我所知,这意味着指向字节数组的指针。您不能只将其分配给字符串,而是使用(new String(inMsg))。 此外,由于您没有初始化数组,因此在收到数据后(如果比数组短),您将收到垃圾。

相关问题