Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как читать данные блочно с помощью TcpClient? / 2 сообщений из 2, страница 1 из 1
09.10.2014, 12:21
    #38771511
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как читать данные блочно с помощью TcpClient?
Мне по TCP передают структуры. Размер их каждый раз разный из-за того, что одним из полей структуры является массив, который для каждой структуры может иметь разную длину.

TCP или TcpClient как-то гарантируют, что, если я буду в цикле опрашивать свойство TcpClient.Available, то каждый при каждом таком опросе будет доступно число байт, равное кратному числу структур в потоке (TcpClient.GetStream())? Вроде, в TCP есть пакеты, и приём-передача идёт этими пакетами. Но эти пакеты не обязательно должны иметь размер, равный передаваемой структуре? Или обязательно?

Или это сервер и клиент должны договариваться о том, как они передают данные? Я тут идею прочитал, что можно перед каждой структурой передавать фиксированный массив байт, означающий размер последующей структуры. Тогда чтение из потока будет заключаться в том, что я должен сначала прочитать фиксированное число байт, означающее длину следующей порции данных, затем прочитать эту следующую порцию данных, потом снова фиксированное число байт и т. д. Такой подход нормальный?
...
Рейтинг: 0 / 0
09.10.2014, 13:56
    #38771686
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как читать данные блочно с помощью TcpClient?
user7320TCP или TcpClient как-то гарантируют, что, если я буду в цикле опрашивать свойство TcpClient.Available, то каждый при каждом таком опросе будет доступно число байт, равное кратному числу структур в потоке
Нет, конечно.

user7320Или это сервер и клиент должны договариваться о том, как они передают данные?
Да, это называется протокол прикладного уровня.

user7320Я тут идею прочитал, что можно перед каждой структурой передавать фиксированный массив байт, означающий размер последующей структуры. Тогда чтение из потока будет заключаться в том, что я должен сначала прочитать фиксированное число байт, означающее длину следующей порции данных, затем прочитать эту следующую порцию данных, потом снова фиксированное число байт и т. д. Такой подход нормальный?
Да, это самый лучших ИМХО подход для указанного случая (tcp)
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как читать данные блочно с помощью TcpClient? / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]