2009-02-11 6 views
5

Czy ktoś wie, jak otrzymać (jak się dowiedzieć, że otrzymałeś) pozapasmowe dane z gniazdami Java? W szczególności Czytałem dokumentację sendUrgentData i setOOBInline który stanowi, że:Gniazda Java z danymi poza pasmem

Uwaga, tylko ograniczone wsparcie jest przewidziane do obsługi przychodzących pilnych danych. W szczególności nie przekazano żadnego powiadomienia o pilnych danych i nie ma możliwości rozróżnienia między danymi normalnymi a pilnymi, chyba że protokół wyższego poziomu.

Ale mam jeszcze nadzieję, że ktoś ma rozwiązanie :-)

Więcej szczegółów:

wyślę obiektów odcinkach koryta gniazdo i nie jestem naprawdę zobaczyć, jak mogę znajdź "losowy" bajt OOB wstawiony do strumienia (inny niż fakt, że Java da mi wyjątek, kiedy spróbuję deserializować obiekt).

+0

dupe http://stackoverflow.com/questions/589928/socket-programming-how-do-i-handle-out-of-band-data –

+0

@RomainHippeau Drugie pytanie jest ogólne pytanie TCP, ten jeden dotyczy implementacji Java. –

Odpowiedz

2

Tomcat ma utrzymaną implementację gniazda JNI, które może odczytywać pilne pakiety w trybie OOB.

+0

Dzięki, to jest świetna wskazówka. Utrzymywanie przez Tomcat oznacza, że ​​nie muszę się tak martwić, że nie będzie on obsługiwany w przyszłości. Link btw to: http://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/tomcat/jni/Socket.html#atmark%28long%29 –

2

Wygląda jak Java, aż do wersji Java 6 (nie badałem środowiska Java 7, ponieważ nie wiem, czy zdecydowały, co się stanie, czy nie) i wygląda na to, że Java nie dostarcza żadnych w ogóle wsparcie dla czytania pilnych informacji TCP w sposób pozapasmowy. Wygląda na to, że do tej pory jest to świadomy wybór.

Jednak, zrobił znaleźć użytkownika, który implemented his own rozwiązanie, za pomocą JNI, aby pomyślnie odczytać danych pilnych poza strumieniem. Ten hack jest bardzo stary i może, ale nie musi działać na ostatnich JDK. Nie próbowałem tego sam! Twój przebieg może się różnić. :) Ale mam nadzieję, że to ci pomoże.