Главная страница
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.021 c
14-53704
Ihor Osov'yak
2004-01-29 19:22
2004.02.17
PSAPI.dll в NT4 после какого SP штатно присутствует?


14-53706
Marina_S
2004-01-29 21:31
2004.02.17
запуск дос программы


14-53692
VictorT
2004-01-30 11:13
2004.02.17
Посоветуйте, как перекомпоновать интерфейс.


8-53657
hi4kok
2003-10-20 03:09
2004.02.17
как реализовать вид из окна машиниста? деревья,рельсы и проч?


4-53822
lokka
2003-12-14 14:20
2004.02.17
SHChangeNotifyRegister для Service Application