Получение непечатаемых символов, предшествующих NAK, из Java Socket с использованием протокола ASCII - PullRequest
0 голосов
/ 28 января 2019

Это странно.У меня есть Runnable, которому поручено отправить сообщение в сокет и получить ответ.Когда я создаю тестовый класс, который просто создает экземпляр Runnable, отправляет сообщение и получает ответ, я получаю ожидаемый вывод (строка CSV).Однако, когда я запускаю точный тот же код, что и часть приложения, которое я создаю, в ответ получается множество непечатаемых символов, начиная с "\ u0015" (NAK). 1 Протокол, использующий сокеты, не выдает NAK в любой момент.(Должно выдаваться "FAIL_{reason}".

. Тот факт, что я получаю NAK, каким-либо образом связан с реализацией Java самой Socket? (Я пытался получить стектрассировка для вызовов, но все, что я получаю, это до того момента, когда вызывается метод run(), без вызова методов изнутри. Насколько я знаю, ни в одной точке между чтением из потока Socket и приложенияс помощью обёртки, запрашивая ответ, получает ли к ответу символ для NAK.)

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


  1. В частности, я возвращаю байты 0x15 0x03 0x01 0x00 0x02 0x02, которые соответствуют NAK ETX NUL STX STX, что является бредом.

1 Ответ

0 голосов
/ 31 января 2019

После отладки проблемы за последние несколько дней (включая просмотр пакетов с помощью WireShark и распечатку параметров, передаваемых методам), я наконец нашел источник проблемы.

Я ошибочно передавал соединениесведения о безопасном соединении WebSocket с кодом создания и взаимодействия сокета TCP / IP .Он никогда не подключался к локальному приложению, предоставляющему сервер сокетов TCP / IP.

...