2009-05-12 2 views
0

Я пишу клиент .Net/C# на сервер Java на Solaris.. Net клиент против Java-сервера с необработанными данными

Сервер Java выписывает необработанные байтовые данные в формате Gziped, который мне нужно извлечь, но у меня возникли проблемы с чтением данных в правильных размерах буфера. Я прочитал сообщение не-детерминистически неполное или полное и не может прочитать второе сообщение в любом случае. Я читаю байты, используя класс NetworkStream с свойством DataAvailable.

Я предполагаю, что это может быть связано с проблемой маленького/большого конца. Нужно ли использовать специальное преобразование для изменения данных с большого на маленький Endian? Нужно ли читать необходимые байты с помощью заголовка gzip?

Раньше я использовал один и тот же сервер с несжатым протоколом и не имел проблем с использованием StreamReader с функцией ReadLine раньше, но этот протокол был чисто текстовым.

Редактировать: К сожалению, у меня нет выбора, поскольку предоставляется удаленный сервер и протокол. Является ли конечная часть формата GZip или мне нужно только преобразовать заголовок соответственно? Несжатые данные представляют собой чистые строки с кодировкой UTF8 с разрывами строк в качестве разделителей.

ответ

2

Формат GZIP не является сложным. Он доступен во всей красе в a simple, accessible specification document, IETF RFC 1952.

Формат GZIP определяет порядок бит для байтов. Он не настраивается с флагом для подтверждения. Производитель потока GZIP отвечает за соответствие спецификации в этом отношении и потребителю потока GZIP, также.

Если бы я отлаживал это, я бы посмотрел на байты на каждом конце провода и убедился, что байты, входящие, совпадают с байтами. Этого достаточно, чтобы отбросить проблемы с эндией.

Если у вас нет успешной передачи байта GZIP, попробуйте передать тестовые данные - 16 байт 0xFF, затем 16 байт 0xAA и т. Д. И т. Д. Затем убедитесь, что это данные, выходящие с другого конца ,

Извините, я не знаю, что вы подразумеваете под Я прочитал сообщение, не детерминистически неполное или полное, и не может прочитать второе сообщение в любом случае. Второе сообщение? Какое второе сообщение? Конкретность не должна влиять на объем данных, которые вы получаете.

Мне кажется, что у вас нет уверенности в том, что вы успешно передаете данные. Я бы предположил, что вы проверяете это до того, как будете работать над проблемами с Endian и вопросами формата GZIP.

+0

Моя проблема в том, что сервер полностью вышел из-под контроля. Поэтому мне это так сложно. Я думаю, что у меня проблема на сетевом уровне, но я не понимаю, откуда она взялась. – weismat

+0

Раньше я работал с несжатым сервером - поэтому я знаю, что сетевые основы отправки правильны - проблема только в принимающей стороне. Uncompressed Я использовал только StreamReader с ReadLine, и это работало нормально ... мой конец связи по-прежнему несжатый, но вначале мне нужна аутентификация на основе запроса, которая уже терпит неудачу. – weismat

Смежные вопросы