Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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
1-52230
_none_
2003-12-04 20:39
2003.12.16
Проблемы с освобождением ресурсов


3-52064
RAM
2003-11-25 17:55
2003.12.16
помогите с запросом


4-52436
Ал
2003-10-22 10:20
2003.12.16
Как узнать, что запущен скринсэйвер и корректно завершить его?


6-52329
Pavels
2003-10-22 10:16
2003.12.16
dns/soa/mx/ns - помогите с инфой/доками


3-52088
Devourer
2003-11-24 14:36
2003.12.16
Лог изменений в таблице





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский