Поток ввода-вывода приложения Java Video Chat не работает - PullRequest
1 голос
/ 23 марта 2019

Я создаю приложение для видеочата, которое использует сеть Java (aka. Sockets) для отправки изображений с веб-камеры другому клиенту.

Мой код отправляет сначала длину буферизованных данных изображения, а затем фактические данные.,Сервер также читает сначала int, а затем сами данные.Первое изображение сработало, но после него поток ввода данных считал отрицательное число в качестве длины.

Сторона сервера:

frame = new JFrame();
        while (true) {
            try {

                length = input.readInt();
                System.out.println(length);
                imgbytes = new byte[length];
                input.read(imgbytes);
                imginput = new ByteArrayInputStream(imgbytes);
                img = ImageIO.read(imginput);
                frame.getContentPane().add(new JLabel(new ImageIcon(img)));
                frame.pack();
                frame.setVisible(true);

            }
            catch(IOException e){
            e.printStackTrace();
            }
        }

Сторона клиента:

while(true) {
            try {

                    currentimg = webcam.getImage();
                    ImageIO.write(currentimg, "jpg", imgoutputstream);
                    imgbytes = imgoutputstream.toByteArray();
                    out.writeInt(imgbytes.length);
                    out.write(imgbytes);

            } catch (IOException e) {
                e.printStackTrace();
            }
        }

1 Ответ

2 голосов
/ 23 марта 2019

На стороне клиента вы всегда записываете новое изображение в существующий поток.Это приводит к увеличению размера массива в каждой итерации.В java int имеет максимум 2147483647.Если вы увеличиваете это целое число, оно пропускается до минимального значения auf int, которое является отрицательным (см. в этой статье ).

Поэтому, чтобы исправить эту ошибку, необходимо очистить поток перед записьюследующее изображение, чтобы его размер никогда не превышал максимальное значение целого числа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...