Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.17;
Скачать: CL | DM;

Вниз

Длина принятых данных   Найти похожие ветки 

 
Андреев   (2003-12-13 14:12) [0]

В клиенте в обработчике нажатия кнопки стоит
ClientSocket.Socket.SendText("Text");

На сервере контролируем длину принятого сообщения
l:=Length(Socket.RecieveText);

Нажимаем на кнопку - получаем l=4.
Но если нажимать очень быстро то получаем 8 а то и 12.
Как это лечить?
(Реально используется не кнопка, а построчная пересылка данных по 5символов)


 
Digitman ©   (2003-12-13 14:25) [1]


> Как это лечить?


что "лечить"-то ? в этом нет ничего "больного" - так и должно быть


 
Polevi ©   (2003-12-13 18:41) [2]

предваряй данные размером данных
считывай размер, затем колво байт = размеру


 
Андреев   (2003-12-14 10:33) [3]

Если я буду посылать сначала длину данных то будет ещё большее нагромождение в Length(RecieveText). Скорость поступления данных для передачи на сервер я не могу регулировать.
Надо сделать чтоб данные не слипались.


 
Digitman ©   (2003-12-14 11:40) [4]


> то будет ещё большее нагромождение


кто вообще заставляет тебя использовать ReceiveText() ?
есть еще метод ReceiveBuf(), который , собственно, и вызывается внутри метода ReceiveText() !


> Скорость поступления данных для передачи на сервер я не
> могу регулировать.


глупости.

если, к примеру, в соответствии с ПИО, ожидается поступление данных типа Integer (4 байта), то в событии OnRead() считывай не более 4-х байт. Получил меньше ? Буферизуй то что получил и жди след.события OnRead(), в котором будешь пытаться прочитать-буферизовать недостающие до Integer-размера число байт... и так до тех пор пока не будут прияты все 4 байта


> Надо сделать чтоб данные не слипались


именно для этого в ПИО и следует предусмотреть префикс размера и/или символы-разделители структурных пакетов


 
Андреев   (2003-12-14 20:02) [5]

RecieveBuf() я тоже пробовал. Всёравно слипается также.
Ещё проблема- сервер как бы не знает сколько байт ожидается.


 
Digitman ©   (2003-12-15 08:50) [6]


> Всёравно слипается также


да что значит "слипается" ?!
TCP - протокол поточный !!

кто тебе вообще сказал, что каждый SendText() на стороне передатчика будет соответствовать отдельному ReceiveText() на стороне приемника ? нет и не может быть такого соответствия при поточном протоколе !


> сервер как бы не знает сколько байт ожидается


если клиент ему об этом не сообщит, то, разумеется, знать не будет !


 
Андреев   (2003-12-15 18:28) [7]

Тогда поставим вопрос так.
Через порт RS232 приходят данные( команды запроса) их надо переправить на устройство которое подключено к RS232 на другом компьютере. Потом принять ответ.
Это возможно реализовать?
Когда приходит единичный запрос - всё работает.
Но запросы приходят с частотой примерно блоков в секунду. И запросы слипаются...


 
savva ©   (2003-12-15 18:48) [8]

я повторю слова Digitman , но все таки...
Ты болки, приходящий в COM-порт разделять умеешь?

Если да, то делаешь так: перед посылкой пакет посылай число 4 байта (я думаю тебе хватит) указывающие на размер посылаемого пакета. На принимающей стороне принимаешь 4 байта ( !! ни больше не меньше:)), получаешь ожидаемый размер данных. Затем читаешь ровно столько сколько надо и так до бесконечности:) Если по каким либо причинам к тебе пришло меньше, чем "должно было" запоминай сколько не прочитал, чтобы именно столько прочитать в следующем шаге цикла..

Все это упрощено сильно..

ЗЫ. из струи воды ведром сложно забрать кубометр.. так же и у тебя. Как вариант можешь использовать строго регламетрированные структуры для отсылки и получения - но все равно тебе придется обрабатывать количество прочитанных/непрочитанных байтиков..



Страницы: 1 вся ветка

Текущий архив: 2004.02.17;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
14-53755
CS
2004-01-27 21:01
2004.02.17
Хостинг


1-53601
Delphin
2004-02-09 14:25
2004.02.17
Проблема с транслитерезацией


1-53600
Александр
2004-02-07 20:42
2004.02.17
Размер окна приложения...


1-53520
olookin
2004-02-05 13:44
2004.02.17
Представление числа в двоичном виде


14-53713
тихий вовочка
2004-01-28 07:14
2004.02.17
Куда пойти учиться?