Android UDP Socket - получение "мусора" - PullRequest
0 голосов
/ 17 марта 2011

ОК, так что в данный момент я пытаюсь создать игру для 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 - это серия повторяющихся цифр / букв.

К сожалению, я дошел до того, что расстроился и теперь затуманен мозгом и не могу думать о своей жизни, где я ошибся.

ТИА

p.s. Я даже попытался сделать получаемый байтовый массив того же размера, что и исходящий, но безуспешно: /

1 Ответ

0 голосов
/ 17 марта 2011

Насколько я знаю, это означает указатель на байтовый массив.Вы не можете просто присвоить его строке, вместо этого используйте (new String(inMsg)).Кроме того, поскольку вы не инициализировали массив, вы получите мусор после полученных данных (если они короче массива).

...