Вопрос:

Длина пакетов UDP написана неправильно

java udp multicast fileoutputstream bytebuffer

53 просмотра

1 ответ

25 Репутация автора

Я написал небольшую программу, которая принимает пакеты UDP и сохраняет их данные в файл.

        MulticastSocket socket = getMulticastSocket(interfaceAddress, multicastAddress, port);
        FileOutputStream fos = null;
        try{
            fos = new FileOutputStream(fileName);
            while(true) {
                byte[] data = new byte[BUFFER_SIZE];
                byte[] lengthBytes = new byte[4];
                DatagramPacket packet = new DatagramPacket(data, 0, data.length);
                socket.receive(packet);
                int length = packet.getLength();
                ByteBuffer lengthBB = ByteBuffer.wrap(lengthBytes);
                lengthBB.putInt(length);
                fos.write(lengthBB.array());
                fos.flush();
                fos.write(data, 0, length);
                fos.flush();
            }
        }

после этого я пытаюсь прочитать его, используя следующий код

final FileInputStream inputStream = new FileInputStream(fileName);
byte[] length = new byte[4];
while (inputStream.read(length) != -1){
    int receivedLength = ByteBuffer.wrap(length).getInt();
    byte[] body = new byte[receivedLength];
    inputStream.read(body);
    // doing something with body
    length = new byte[4];
}

это работает в целом, но в середине файла я получил отрицательное значение в переменной receiveLength (-2147483648 и [-128, 0, 0, 0] в байтовом представлении).

BUFFER_SIZE = 10240, но я не думаю, что пакет был больше этого значения.

Вопрос: почему это произошло?

ps У меня нет доступа к машине, на которой был записан файл, и я не могу посмотреть сетевой поток. У меня есть только файл.

Автор: ViKo Источник Размещён: 03.02.2017 03:26

Ответы (1)


0 плюса

21 Репутация автора

Максимальный размер сообщения UDP составляет 64 КБ. Вы сказали, что не думаете, что пакет больше 10240, но это может быть. Попробуйте увеличить буфер до 64 * 1024 и посмотрите, не изменит ли это результаты.

Автор: Brian Fincher Размещён: 03.02.2017 03:39
Вопросы из категории :
32x32