Java-сокеты с внешними данными
Кто-нибудь знает, как получить (как узнать, что вы получили) внеполосные данные с помощью сокетов Java? В частности, я прочитал документацию для sendUrgentData и setOOBInline, в которой говорится, что:
Обратите внимание, что для обработки входящих срочных данных предоставляется только ограниченная поддержка. В частности, уведомление о поступающих срочных данных не предоставляется, и нет возможности отличить нормальные данные от срочных данных, если это не предусмотрено протоколом более высокого уровня.
Но я все еще надеюсь, что у кого-то есть решение:-)
Больше деталей:
Я посылаю сериализованные объекты через сокет и не вижу, как найти "случайный" байт OOB, вставленный в поток (кроме того факта, что Java выдаст мне исключение, когда я попытаюсь десериализовать объект).
2 ответа
Tomcat имеет поддерживаемую реализацию сокета JNI, который может читать срочные пакеты в режиме OOB.
Это похоже на Java, вплоть до Java 6 (я не исследовал Java 7, так как не знаю, решили ли они наверняка, что будет входить или нет), и похоже, что Java вообще не предоставляет никакой поддержки для Чтение срочной информации TCP внеполосным способом. И, похоже, пока это осознанный выбор.
Однако я нашел одного пользователя, который реализовал свое собственное решение, использующее JNI, для успешного чтения срочных данных из потока. Этот хак очень старый и может работать, а может и не работать на последних версиях JDK. Я не пробовал это сам! Ваш пробег может варьироваться.:) Но, надеюсь, это поможет вам.