2009-02-11 9 views
5

Qualcuno sa come ricevere (come sapere che hai ricevuto) dati fuori banda con socket Java? In particolare ho letto la documentazione per sendUrgentData e setOOBInline cui si afferma che:Prese Java con dati fuori banda

nota, solo un supporto limitato è previsto per la gestione dei dati urgenti in arrivo. In particolare, non viene fornita alcuna notifica dei dati urgenti in arrivo e non è possibile distinguere tra dati normali e dati urgenti, a meno che non sia previsto da un protocollo di livello superiore.

Ma sto ancora sperando che qualcuno ha una soluzione :-)

Maggiori dettagli:

sto inviando oggetti serializzati Trough la presa e non sto davvero vedere come posso trova un byte OOB "casuale" inserito nello stream (diverso dal fatto che Java mi darà un'eccezione quando cercherò di deserializzare l'oggetto).

+0

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

+0

@RomainHippeau l'altra domanda è una domanda TCP generica, questa riguarda un'implementazione Java. –

risposta

2

Tomcat ha un'implementazione mantenuta del socket JNI in grado di leggere i pacchetti urgenti in modo OOB.

+0

Grazie, questo è un ottimo consiglio. Essere gestito da Tomcat significa che non devo preoccuparmi troppo di non essere supportato in futuro. Il link btw è: http://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/tomcat/jni/Socket.html#atmark%28long%29 –

2

Sembra Java, fino a Java 6 (non ho studiato Java 7 poiché non so se hanno deciso per certo cosa andrà o meno) e sembra che Java non fornisca alcun supporto a tutti per la lettura di informazioni TCP urgenti in modo fuori banda. E sembra che questa sia una scelta deliberata, finora.

Tuttavia, ho fatto trovato un utente che implemented his own soluzione, utilizzando JNI, per leggere correttamente i dati urgenti fuori flusso. Questo hack è molto vecchio e potrebbe non funzionare sui recenti JDK. Non l'ho provato io stesso! La tua milizia può variare. :) Ma spero che questo ti possa aiutare.