![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема со склейкой пакетов [D7, NT4, Win2k, WinXP]
антон1243232 © (2009-03-25 12:14:00)Всем привет
Есть Клиент серверное приложение.
При событии OnformMouseMove ClientSocket шлёт серверу строку
с координатами мыши 1024,23.
Сервер при событии OnClientRead разбивает строку на
x=1024
y=23
и вызывает процедуру
SetCursorPos(x,y)
Все вродебы работает, но работает не так как бы хотелось.
Если быстро перемещать мышь на форме то получается так что склеиваются пакеты и мы имеем строку не 1024,23 а
1024,231024,231024,231024,231024,23
1024,231024,231024,231024,231024,23
1024,231024,231024,231024,231024,23
что-то типа этого.
Из того что пришло мне в голову решил делить эти пакеты если они склеены.
Т.е в конце отправляемой строки добавлял |
получал 1024,23|1024,23|1024,23|1024,23|1024,23|1024,23|
1024,23|1024,23|1024,23|1024,23|
дальше на стороне сервера парсил полученый результат и всё работает но блин обять не так как надо...
Теперь при перемещении мыши она на другом десктоме перемещается медлено...т.е рывками..
Посдкажите у кого какие идеи может кто-то сталкивался с такой проблемой....
Спасибо дорогие господа!
FireMan_Alexey (2009-03-25 13:24:00) [1]Как я написал в [2] пересылать координаты строками, большая расточительность!
К примеру, по твоему алгоритму, координаты (1023,767) будут выглядеть так:
|1023,767| =>9 байт не постоянной длины
а в моем случае пакет имеет постоянную длину 4 байта и парсить особенно не надо. Надо только контролировать на кратность 4-рем пришедших данных :)
тем более что WORD имеет диапазон 0..65535 т.е. полная совместимость получиться и HD разрешениями :).
И еще ты не сказал, как ты снимаешь координаты с клиентской стороны?!
Если ты просто на таймер впиндюрил GetCursorPos, то соответсвенно оно так и будет работать как ты описал...
Slym (2009-03-25 13:19:00) [2]типа Radmina самопального пишешь?
brother (2009-03-25 13:19:00) [3]зато парность теперь парсить не надо)
Сергей М. (2009-03-25 13:17:00) [4]
> FireMan_Alexey © (25.03.09 12:44) [2]
> и не надо парсить
"Надо, Федя, надо .." (С)
Он же в OnRead все без разбору выгребает из вх.очереди)
brother (2009-03-25 13:15:00) [5]или [3] или отсылай только последнюю координату + [2] учти
FireMan_Alexey (2009-03-25 13:13:00) [6]Тогда дискретность повысится, а он синусоиду хочет :)
Slym (2009-03-25 13:12:00) [7]антон1243232 (25.03.09 12:14)
склеиваются пакеты
природа такая у сокетов
антон1243232 (25.03.09 12:14)
перемещается медлено...т.е рывками..
медленно парсиЩъ...
протокол мля...
если пришло несколько координат - пользуй только последнюю
FireMan_Alexey (2009-03-25 12:44:00) [8]MousePacket=Packed Record
X:Word;
Y:Word;
End;
и не надо парсить :)
Сергей М. (2009-03-25 12:26:00) [9]The WM_SETCURSOR message is sent to a window if the mouse causes the cursor to move within a window and mouse input is not captured.