Почему мой ответ с пакетом дейтаграмм неполон? - PullRequest
1 голос
/ 30 июня 2019

Я пытаюсь создать приложение для Android для выполнения запросов UDP. Однако всякий раз, когда я пытаюсь получить ответ, последние четыре символа в строке ответа отсутствуют. Ответ должен быть длиной 38 байт.

Я попытался указать, какую кодировку использовать, и это не имело большого значения.

private void updateState() {
    final byte[] msg = hexStringToBytes("24000034...");

    new Thread(new Runnable() {
        public void run() {
            try {
                InetAddress bulbAddress = InetAddress.getByAddress(ipAddr);
                if (!socket.getBroadcast()) socket.setBroadcast(true);
                DatagramPacket packet = new DatagramPacket(msg, msg.length, bulbAddress, 56700);
                socket.send(packet);
                DatagramPacket packet1 = new DatagramPacket(msg, msg.length, bulbAddress, 56700);
                socket.receive(packet1);

                TextView textView = (TextView) findViewById(R.id.state);
                String out = new String(packet1.getData(), packet1.getOffset(), packet1.getLength());

                textView.setText(toHex(out));
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }).start();
}

private static byte[] hexStringToBytes(String input) {
    input = input.toLowerCase(Locale.US);
    int n = input.length() / 2;
    byte[] output = new byte[n];
    int l = 0;
    for (int k = 0; k < n; k++) {
        char c = input.charAt(l++);
        byte b = (byte) ((c >= 'a' ? (c - 'a' + 10) : (c - '0')) << 4);
        c = input.charAt(l++);
        b |= (byte) (c >= 'a' ? (c - 'a' + 10) : (c - '0'));
        output[k] = b;
    }
    return output;
}

public String toHex(String arg) {
    return String.format("%040x", new BigInteger(1, arg.getBytes()));
}

Я ожидаю присутствия последних четырех символов и FF FF или 00 00.

1 Ответ

0 голосов
/ 06 июля 2019

Я думаю, что нашел проблему, мне нужно было использовать новый байтовый массив без значений новой длины 28 байтов вместо того, чтобы использовать только один с 26 байтами, и передать его в package1.В какой-то момент я полностью закрыл глаза на тот факт, что первый пакет на два байта меньше, чем ответ.

...