Pregunta

Estoy escribí a / C # .Net cliente a un servidor Java en Solaris.

El servidor de Java es escribir los datos en bruto de bytes en un formato Gziped cual necesito para extraer, pero estoy teniendo problemas para leer los datos en los tamaños de búfer derecha. He leído el mensaje no-deterministicly incompleto o completo y no puedo leer el segundo mensaje en cualquier caso. Estoy leyendo los bytes utilizando la clase NetworkStream con la propiedad DataAvailable.

Mi conjetura es que podría estar relacionado con un pequeño gran problema / endian. ¿Es necesario utilizar una conversión especial para cambiar los datos de los grandes en la Little Endian? ¿Es necesario para leer los bytes necesarios usando la cabecera gzip?

I utilizado para utilizar el mismo servidor con un protocolo sin comprimir antes y no tenía ningún problema usando un StreamReader con la función ReadLine antes, pero que el protocolo era puramente basado en texto.

Edit: Por desgracia no tengo otra opción que el servidor remoto y el protocolo se da. Es la parte endiness del formato gzip o qué sólo necesito para convertir el encabezado en consecuencia? Los datos no comprimidos son cadenas puras UTF8-codificado con saltos de línea como delimitadores.

¿Fue útil?

Solución

El formato GZIP no es complejo. Está disponible en todo su esplendor en rel="nofollow un documento de especificación simple, accesible, IETF RFC 1952 .

El formato GZIP especifica el orden de los bits de los bytes. No se puede ajustar con una bandera para endianness. El productor de una corriente de GZIP es responsable de cumplir con la especificación en ese sentido, y un consumidor de una corriente de GZIP, así mismo.

Si estuviera depurando esto, me gustaría ver a los bytes en cada extremo del cable y verificar que los bytes que entran son los mismos que los bytes que salen. Eso es suficiente para dejar a un lado las cuestiones endian.

Si usted no tiene éxito la transmisión de una corriente de bytes GZIP, intente transmitir datos de prueba - 16 bytes de 0xFF, seguido de 16 bytes de 0xAA, etc etc y luego, verificar que estos son los datos que salen del otro extremo.

Lo siento, no sé qué quiere decir con He leído el mensaje no-deterministicly incompleto o completo y no se puede leer el segundo mensaje en cualquier caso. Segundo mensaje? Lo segundo mensaje? El orden de bits no debería afectar a la cantidad de datos que recibe.

Se siente a mí que usted no tiene la confianza de que usted está transmitiendo datos con éxito. Yo sugeriría que compruebe que antes de trabajar en cuestiones endian y las cuestiones de formato GZIP.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top