Двунаправленная розетка для связи с принтером - PullRequest
0 голосов
/ 09 апреля 2019

Я хочу поговорить с сетевым принтером по TCP через порт 9100. Я хотел бы прочитать из сокета, чтобы увидеть, если принтер делает какое-либо начальное сообщение, отправить что-то для печати, а затем снова прочитать из сокета, чтобы увидеть, еслипринтер делает какой-либо ответ перед закрытием сокета.

Проблема в том, что принтер может что-то сказать или не сказать в начале и в конце сеанса.Итак, если я использую блокирующий сокет, то при начальном чтении он может просто зависнуть (или я могу рассчитывать на read (), возвращающее 0 байт в такой ситуации?), Если принтеру нечего сказать.

Правильный ли способ сделать это, чтобы использовать неблокирующий сокет и затем использовать тайм-аут, чтобы решить, когда прекратить чтение?Другими словами, чтобы сделать это:

(1) введите цикл чтения и прервите, если ничего не читается в течение 10 секунд
(2) отправьте данные для печати
(3) снова введите цикл чтения иперерыв, если ничего не читается в течение 10 секунд

Это кажется довольно хакерским, и это также раздражает, потому что заставляет пользователя задерживать 20 секунд.

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

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