Я довольно новичок в Java и пытаюсь установить сокет-соединение между сервером и клиентом, и мне сказали работать с Java.
До того, как я начал программировать на Java, я работал с QT, у которого есть сигнал / слот для приема данных из сокета, я считаю этот способ очень эффективным.
Кажется, что в Java мне нужно добавить символ, такой как символ новой строки "\ n" в конце данных, чтобы мои клиенты сказали, что я отправил их на сервер. Но QT, похоже, ищет заголовок и нижний колонтитул сообщения (на уровне пакета, а не в кодах ASCII) и может определять окончание передачи, не просматривая сами данные для специального символа или ожидая закрытия соединения.
Я в основном получаю HEX-коды, а не ASCII, поэтому плохой идеей будет иметь конечный символ (строка \ n), потому что мне нужны эти символы в качестве данных, а не команд, поэтому readline()
невозможно использовать.
С другой стороны, длина моих данных варьируется от 4 байтов до 120 байтов, а время между получением сообщения варьируется от 0,001 секунды до часа, поэтому я не могу использовать метод read()
, так как он убивает сообщение и отделяет байты от друг друга. Например, если два сообщения возвращаются друг к другу как два, пять байтов, они могут быть неправильно прочитаны как одно сообщение из 10 байтов.