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

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

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

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

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


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