Pergunta

Estou escrevendo um cliente .NET/C# para um servidor Java no Solaris.

O servidor Java está escrevendo dados de bytes brutos em um formato Gziped que eu preciso extrair, mas estou tendo problemas para ler os dados nos tamanhos de buffer certo. Eu li a mensagem não deterministamente incompleta ou completa e não consigo ler a segunda mensagem em nenhum caso. Estou lendo os bytes usando a classe NetworkStream com a propriedade DataAvailable.

Meu palpite é que isso pode estar relacionado a um pequeno/grande problema endiano. Preciso usar uma conversão especial para alterar os dados de Big para Little Endian? Preciso ler os bytes necessários usando o cabeçalho GZIP?

Eu costumava usar o mesmo servidor com um protocolo não compactado antes e não tinha problemas em usar um fluxo de fluxo com a função ReadLine antes, mas esse protocolo era puramente baseado em texto.

EDIT: Infelizmente, não tenho escolha, pois o servidor e o protocolo remotos são fornecidos. A perdão é parte do formato GZIP ou eu só preciso converter o cabeçalho de acordo? Os dados não compactados são strings codificados por UTF8 puros com quebras de linha como delimitadores.

Foi útil?

Solução

O formato GZIP não é complexo. Está disponível em toda a sua glória em Um documento de especificação simples e acessível, IETF RFC 1952.

O formato GZIP especifica a ordem de bits para bytes. Não é ajustável com uma bandeira para Endianness. O produtor de um fluxo GZIP é responsável por estar em conformidade com as especificações a esse respeito, e um consumidor de um fluxo GZIP da mesma forma.

Se eu estivesse depurando isso, olharia para os bytes em cada extremidade do fio e verificaria que os bytes que entram são os mesmos que os bytes que saem. Isso é o suficiente para deixar de lado os problemas endianos.

Se você não tiver sucesso transmitindo um GZIP ByTestream, tente transmitir dados de teste - 16 bytes de 0xFF, seguidos por 16 bytes de 0XAA, etc. e, em seguida, verifique se esses são os dados que saem da outra extremidade.

Me desculpe, não sei o que você quer dizer com Eu li a mensagem não deterministamente incompleta ou completa e não consigo ler a segunda mensagem em nenhum caso. Segunda mensagem? Que segunda mensagem? A Endianness não deve afetar a quantidade de dados que você recebe.

Parece -me que você não tem confiança de que está transmitindo dados com sucesso. Eu sugeriria que você verifique isso antes de trabalhar em questões de Endian e no formato GZIP.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top