Почему используя socket "команда" через OutputStream.write - проходит, а ответа через InputStream - нет?

Появилась задача управлять знаком из кода, знак подключен по rs485 к ruggedCom rs416(это железка с com- портами), к ней через сеть подключен мой ПК, т.е. у нее есть свой IP и номер com порта. Когда я создаю socket, указываю ip и нужный мне порт. При этом посылая команду через OutputStream.write() - команда проходит и знак переключается, но мне нужно так же принимать подтверждение от знака в виде ответа, что он переключился правильно. Но в итоге, InputStream.in() - возвращает -1, иногда проскакивает 1. У ruggedCom -есть свой софт, который создает виртуальный ком порт с настройками скорости и т.д. и вот если я цепляюсь к этому порту с помощью SerialPort, тогда всё норм. приходит ответ, но мне нужно обойтись без создания виртуального com порта, или создавать его каким то образом из кода или в идеале - получать ответ через InputStream.read(). Знаю задача странная, но очень нужно найти выход, буду благодарен любой подсказке, спасибо.

вот, команда так проходит.

 //создание сокета с указание ip адреса и com порта
        Socket socket = new Socket(ip,com);
        OutputStream out = socket.getOutputStream();

        //метод changeWord меняет слово учитывая полосу!
        String command = changeWord(commandWord, line, value);
        InputStream in = socket.getInputStream();
        byte[] buffer = new byte[1000];

//      //отправка команды на знак
        out.write(hexToByte(command));

        System.out.println(in.read(buffer));
        socket.close();

но System.out.println(in.read(buffer)) - возвращает -1

а вот так получается получить нужный ответ, но получается что я использую дополнительное приложение которое создает виртуальный com порт.

         serialPort = new SerialPort("COM5");
        try {
            serialPort.openPort(); // открытие порта
            serialPort.setParams(
                    SerialPort.BAUDRATE_19200,
                    SerialPort.DATABITS_8,
                    SerialPort.STOPBITS_1,
                    SerialPort.PARITY_EVEN); // основные параметры протокола UART
            serialPort.setEventsMask(SerialPort.MASK_RXCHAR); //Устанава  маски или списка события на которые будет происходить реакция. В данном случае это приход данных в буффер порта
            serialPort.addEventListener(new EventListener());//Передача экземпляра класса EventListener порту, где будет обрабатываться события


            System.out.println("имя созданого порта  "+serialPort.getPortName());
            if(serialPort.isOpened()){
                System.out.println("порт "+serialPort.getPortName()+" открыт");

                for(int i = 0; i <10; i++){
                    System.out.println("запрос: 1058015916");
                    serialPort.writeBytes(hexToByte("1058015916"));
                   
                   
                }

Ответы (1 шт):

Автор решения: Андрей Мовсесян

Смог разобраться благодаря статье - https://skipy-ru.livejournal.com/3621.html, моя ошибка была в том что я пытался получить байты методом in.read(), а он возвращает количество считанных байт, а не сами значения. Вопрос для меня был очень важный, хорошо что попалась эта статья, автору спасибо!

→ Ссылка