Форум: "Сети";
Текущий архив: 2002.02.04;
Скачать: [xml.tar.bz2];
ВнизSocket, помогите с NMStrm Найти похожие ветки
← →
Digitman (2001-11-02 11:02) [9]Двигаться нужно вот куда : почитать лителатуру по протоколу TCP и понять различия между stream-oriented (TCP) и message-oriented (UDP) соединениям.
TNMStrm/TNMStrmServ используют поточный (stream-oriented) режим транспорта пакетов. Это означает, что при возникновении события TSE.NMStrmServ1MSG поток, переданный параметром strm, вопреки твоим ожиданиям, содержит просто очередной блок данных, полученных от клиента, и его никак нельзя ассоциировать с данными, размер которых точно соответствует размеру отдельно переданной "картинки".
Для того, чтобы сервер мог прочитать ровно столько данных, сколько реально требуется для построения очередной ожидаемой "картинки", он должен знать размер данных, соответствующих очередной картинке в непрерывном потоке картинок, передаваемых клиентом. А как ему узнать этот размер ? Да никак он этого не узнает, если клиент сам ему об этом не сообщит !
Стандартное решение :
- клиент непосредственно перед передачей серверу собственно данных "картинки" передает ему некий служебный блок данных, содержащий инф-цию о размере следом передаваемых данных, соответствующих отдельной картинке.
- сервер в обработчике сообщения сначала читает эту инф-цию, а уж затем использует полученный размер для выборки из вх.потока-параметра блока данных, размер которого не больше заявленного клиентом; прием целой картинки может растянуться и на несколько событий, поэтому и нужна буферизация принятых блоков где-то в глобально (а не локально, как в твоем коде !) созданном потоке-буфере.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2002.02.04;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.004 c