Форум: "Система";
Текущий архив: 2003.12.16;
Скачать: [xml.tar.bz2];
ВнизСколько раз возникнет событие TServerSocket.ClientRead? Найти похожие ветки
← →
Calm (2003-10-10 16:21) [0]В коде клиентского приложения должен выполняться код типа такого:
...
ClientSocket.SendText(str1);
ClientSocket.SendText(str2);
ClientSocket.SendText(str3);
...
Я предполагал, что на сервере три раза возникнет событие чтение. Однако по непонятной мне причине получаю одно "слипшееся" сообщение с принятым текстом str1+str2+str3.
Более всего непонятно то, что глюк наблюдается, когда клиентские программы запущены на нескольких компах.
В чем может быть причина проблемы?
Может я что-то делаю не так? Опыт работы с сокетами у меня маловат :(
Буду признателен за советы :)
← →
calm (2003-10-10 16:24) [1]Второй день разбираюсь, не могу понять в чем дело :(
От безысходности пробовал делать так:
ClientSocket.SendText(str1);
sleep(200);
ClientSocket.SendText(str2);
sleep(200);
ClientSocket.SendText(str3);
Не помогает!
← →
calm (2003-10-10 16:27) [2]Быть может беда в том, что я использую на сервере stNonBlocking-сокет, а нужно stThreadBlocking?
Тогда мне нужно использовать в событиях чтения от клиента thread-safe code. Это как? Создавать критическую секцию?
← →
крот (2003-10-10 16:36) [3]Придется сделать так, при каждом получении строки, сервер будет посылать уведомление клиенту, что он уже получил очередную строку и только тогда клиент будет посылать следующую строку.
← →
Verg (2003-10-10 16:36) [4]Все нормально. В TCP/IP - как разбивать поток на "блоки" - это его (TCP/IP) личное дело. Ты мог бы получить и шесть OnRead-ов и два.
← →
calm (2003-10-10 16:42) [5]
> Все нормально
:-)
> при каждом получении строки, сервер будет посылать уведомление
> клиенту, что он уже получил
Ох... И по-проще нет способа? :((
← →
крот (2003-10-10 16:55) [6]
> Ох... И по-проще нет способа? :((
Нет :) Все равно придется этот огород городить. А если будет большая посылка, а TCP/IP передает данные пакетами не больше 8кБ, как ты будешь определять начало и конец посылки? Нужен еше один уровень над TCP/IP.
← →
Verg (2003-10-10 16:58) [7]
> calm © (10.10.03 16:42) [5]
>
> > Все нормально
>
> :-)
А чего смешного?
Я ж тебе говорю - никакой это не "глюк". Все так и должно быть.
Кто тебе сказал, что количество принятых OnRead должно равняться количеству Send-ов ???
← →
calm (2003-10-10 16:59) [8]
> А чего смешного?
>
> Я ж тебе говорю - никакой это не "глюк". Все так и должно
> быть.
Да все в порядке, я тебя понял.
Просто я не ожидал, что так правильно.
← →
calm (2003-10-10 17:02) [9]
> Нет :) Все равно придется этот огород городить
Хреново.
Так не хочется верить, что это действительно так :))
Впрочем, хоть надежда и не умерла, пойду вскапывать грядки своего огорода :)
← →
Digitman (2003-10-10 17:10) [10]
> calm
ничего "хренового".
куча протоколов, которыми ты пользуешься каждый день (включая протол http, при помощи которого ты сейчас это читаешь), используют TCP/IP
← →
calm (2003-10-10 17:15) [11]Вот и мне хотелось бы чего-нибудь поиспользовать, а не огород городить.
P.S. Не сочтите за ленивого, хочется всего и сразу :)
← →
Reindeer Moss Eater (2003-10-10 17:20) [12]Хочется принимать отдельные команды?
Надо внедрять протокол обмена.
Отправил - жди ответа.
Пришел ответ - делай дальше
← →
calm (2003-10-10 17:22) [13]ok, большое спасибо всем.
← →
Basilio (2003-10-11 13:13) [14]А в шестых дельфях есть Indy? В пятых не было, в седьмых есть...
Там в TIdTCPServer есть CommandHandlers - очень мощная вещь.
Мне даже удалось договорить D5::TClientSocket с Kylix3/D7::TIdTCPServer ;)
Сервер должен был работать под linux/win (без напряга сделалось под D7/Kylix3), а клиент должен был быть написан на D5.
← →
Verg (2003-10-11 14:08) [15]
> А в шестых дельфях есть Indy?
Есть.
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2003.12.16;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c