2009-02-11 7 views
5

Weiß jemand, wie man Out-of-Band-Daten mit Java-Sockets empfängt (wie man weiß, dass Sie empfangen haben)? Insbesondere habe ich die Dokumentation für sendUrgentData und setOOBInline gelesen, die besagt, dass:Java-Sockets mit Out-of-Band-Daten

Hinweis, nur begrenzte Unterstützung für den Umgang mit eingehenden dringenden Daten zur Verfügung gestellt. Insbesondere wird keine Benachrichtigung über ankommende dringende Daten bereitgestellt und es ist nicht möglich, zwischen normalen Daten und dringenden Daten zu unterscheiden, es sei denn, sie werden von einem Protokoll höherer Ebene bereitgestellt.

Aber ich bin immer noch der Hoffnung, dass jemand eine Lösung :-)

Weitere Details hat:

I serialisierte Objekte bin das Senden Trog die Steckdose und ich sehe wirklich nicht, wie ich kann, finde ein "zufälliges" OOB-Byte, das in den Stream eingefügt wurde (abgesehen von der Tatsache, dass Java mir eine Ausnahme gibt, wenn ich versuchen werde, das Objekt zu deserialisieren).

+0

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

+0

@RomainHippeau die andere Frage ist eine generische TCP-Frage, diese handelt von einer Java-Implementierung. –

Antwort

2

Tomcat hat eine gepflegte Implementierung von JNI-Socket, die dringend Pakete in einer OOB-Art lesen kann.

+0

Danke, das ist ein guter Tipp. Da ich von Tomcat betreut werde, muss ich mir keine Sorgen machen, dass es in Zukunft nicht mehr unterstützt wird. Der Link ist übrigens: http://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/tomcat/jni/Socket.html#atmark%28long%29 –

2

Es sieht aus wie Java, bis zu Java 6 (ich habe Java 7 nicht untersucht, da ich nicht weiß, ob sie sicher entschieden haben, was hineingehen wird) und es sieht so aus, als würde Java keine bieten Unterstützung überhaupt, um dringende TCP-Informationen out-of-band zu lesen. Und es sieht so aus, als ob dies eine bewusste Wahl ist.

Allerdings habe ich tat einen Benutzer finden, der implemented his own Lösung, mit JNI, um dringend Daten aus dem Strom erfolgreich zu lesen. Dieser Hack ist sehr alt und funktioniert möglicherweise nicht auf aktuellen JDKs. Ich habe das selbst nicht ausprobiert! Ihr Kilometerstand kann variieren. :) Aber hoffentlich wird dir das helfen.