Это сложная проблема.
- Если вы установили OOB inlining на
false
, вы потеряете уведомление.
- Если вы установили OOB inlining в
true
, они потенциально могут быть введены в середине чего-то другого.
Одним из возможных решений является ведущим при условии, этот ответ:
Видимо, 6,0 кодовая Tomcat имеет JNI implementation of sockets, который обрабатывает OOB по-разному. Похоже, вы можете использовать atMark(...)
, чтобы проверить, только что сокет только что получил маркер OOB.
UPDATE - После рассмотрения telnet protocol spec, кажется, что эффект потери уведомления OOB не будет шоу-стоппер. Механизм «synch» Telnet влечет за собой отправку уведомления OOB и добавление команды «DATA MARK» в обычный поток. Он сообщает принимающей стороне, что он может удалять данные (но не команды telnet), пока не увидит «DATA MARK».
Если принимающая сторона пропускает (или игнорирует) маркер OOB, тогда чистый эффект заключается в том, что он не игнорирует данные. Это «в основном безвредное» поведение. Не идеально ... но это не останавливает работу telnet.
К счастью (как отметил @EJP) механизм уведомления TCP OOB редко используется в наши дни. Поэтому ограниченная поддержка Java вряд ли имеет значение.
Следует также отметить, что обработка уведомлений OOB - это не просто проблема Java. По-видимому, различные реализации API-интерфейсов (native/C) сокетов обрабатывают его несовместимыми способами.
Самый лучший совет, чтобы избежать OOB полностью, если это возможно. Разумеется, не разрабатывайте его в новые протоколы.
Это правильно. Это не проблема. В течение многих лет у меня была Java Telnet. – EJP
Спасибо. Это тоже была моя интерпретация, хотя я хотел убедиться, что понял. Я прочитал сокеты Java с ответом за пределами диапазона, и, в то же время связанный, мой вопрос больше связан с протоколом TELNET, чем с неадекватным сокетным ядром Socket ;-) – Daniel
@ Daniel Вам нужно только OOB в Telnet, если вы хотите отправить прерывания клавиатуры по провод. Я занимаюсь сетевым программированием около 25 лет, и я никогда не использовал OOB. Я не пропустил это на Java. – EJP