Re[2]: Чтение из сокета
От: Nickolay Ch  
Дата: 07.06.05 15:45
Оценка: 2 (1)
Здравствуйте, Hobot Bobot, Вы писали:

HB>Здравствуйте, Echer, Вы писали:


E>>При чтении пакетов из сокета, работающего по протоколу TCP, необходимо помнить о 'безразмерности' TCP-пакета (к примеру, сначала отсылать размер самого пакета а потом сам пакет). Просмотрел большое количество примеров на тему работы с сокетами в .NET и нигде не нашел упоминания об этом. Создается впечатление что нужно просто запустить TcpListener, прицепить к нему NetworkStream и будем всегда получать то что отправили. Так ли это?


HB>Насколько я знаю — да. Но обычно надо знать что вся необходимая информация получена и надо начинать ее обрабатывать. Для этого и используется либо заранее переданный размер либо контрольное значение в конце пакета.


TcpListener и NetworkStream просто более удобные обертки над сокетами, в частонсти позволяющие работать с сокетом как с потоком. Однако это не меняет того, что TCP — является "потоковым" протоколом, т.е. не сохраняет границ сообщений при передаче. Это уже ваша задача(Задача протокола уровня приложения), как определять границы сообщений. .Нет обертки ее не выполняют. Единственное, что достаточно просто сделать StreamReader/Writer над сетевым потоком и использовать методы ReadLine(WriteLine), если у вас в сообщении не пристуствуют символы \n то это даст вам готовый протокол уровня приложения.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.