2009-02-11 10 views
5

¿Alguien sabe cómo recibir (cómo saber que recibió) datos fuera de banda con sockets Java? En particular, me he leído la documentación de sendUrgentData y setOOBInline que establece que:Sockets Java con datos fuera de banda

Nota, se proporciona un apoyo limitado para el manejo de datos urgentes entrantes. En particular, no se proporciona ninguna notificación de los datos urgentes entrantes y no hay capacidad para distinguir entre los datos normales y los datos urgentes a menos que así lo disponga un protocolo de nivel superior.

Pero todavía estoy esperando que alguien tiene una solución :-)

Más detalles:

Estoy enviando objetos serializados A través del enchufe y no estoy realmente ver cómo puedo encontrar un byte OOB "aleatorio" insertado en la secuencia (aparte del hecho de que Java me dará una excepción cuando intente deserializar el objeto).

+0

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

+0

@RomainHippeau la otra pregunta es una pregunta genérica de TCP, esta se trata de una implementación de Java. –

Respuesta

2

Tomcat tiene una implementación mantenida de socket JNI que puede leer paquetes urgentes de manera OOB.

+0

Gracias, este es un gran consejo. Ser mantenido por Tomcat significa que no tengo que preocuparme demasiado por que no sea compatible en el futuro. El enlace por cierto es: http://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/tomcat/jni/Socket.html#atmark%28long%29 –

2

Parece Java, hasta Java 6 (no investigué Java 7 porque no sé si han decidido con certeza qué entrará o no) y parece que Java no proporciona ninguna soporte en absoluto para leer información TCP urgente fuera de banda. Y parece que esta es una elección deliberada, hasta ahora.

Sin embargo, me he encuentro un usuario que implemented his own solución, utilizando JNI, para leer correctamente los datos urgentes fuera de la corriente. Este truco es muy antiguo y puede o no funcionar en JDK recientes. ¡No lo he intentado yo mismo! Tu kilometraje puede variar. :) Pero espero que esto te ayude.

Cuestiones relacionadas