Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.12.09;
Скачать: [xml.tar.bz2];

Вниз

Сокеты в Делфи   Найти похожие ветки 

 
sen   (2002-11-27 16:01) [0]

Как обрабатывается socked.receivedtext ?
Допустим у клиента на событие client.read начинается разбор принятой строки. Если разбор достаточно долгий, а в это время в сокет приходит новый текст, что происходит? Дело в том, что строка разбирается неправильно. Кто может рассказать подробнее о процессе приема текста в сокетах.
Спасибо


 
Digitman   (2002-11-27 16:07) [1]


> Как обрабатывается socked.receivetext ?


Да как угодно) Все от твоей фантазии зависит.


> Если разбор достаточно долгий, а в это время в сокет приходит
> новый текст, что происходит?


Пришедший "текст" встанет в очередь на чтение тобой.
Когда завершишь текущий обработчик OnRead(), Winsock возбудит новое событие, если очередь чтения непуста


> Дело в том, что строка разбирается неправильно

Тобой разбирается - заметь)... Разбирай "правильно" - вопрос сам сабой отпадет


> процессе приема текста в сокетах


Если есть альтернатива, следует вообще избегать передачи строк заведомо неизвестной (для приемника) длины.
Альтернатива же проста как 2х2 : перед передачей собственно строки передавать ее ожидаемый размер в байтах


 
Smithson   (2002-11-27 16:09) [2]

Для приема пиши отдельный процесс. Я бы даже сказал больше - лично я делаю в таком случае fork, но увы, в паскале такого нет.


 
Digitman   (2002-11-27 16:14) [3]

>Smithson


> Для приема пиши отдельный процесс


Эт зачем еще ? Достаточно стартовать доп.код.поток для обработки потока принятых в OnRead() данных.


 
Smithson   (2002-11-27 16:18) [4]

СорриЮ та же ошибка терминологии. Cледует читать Для приема пиши отдельный поток.


 
Digitman   (2002-11-27 16:23) [5]

>Smithson

И даже не для "приема", а для "разбора" уже принятого фрагмента потока.

Прием - дело микросекундное, его можно вполне возложить и на обработчик OnRead(). А вот парсинг и исполнение запроса - штука как правило ресурсоемкая и длительная. И вот эту "штуку" как раз следует "запихивать" в доп.код.поток, дабы не "тормозить" осн.код.поток, занимающийся в дан.случае исключительно транспортными "делами"


 
Smithson   (2002-11-27 16:24) [6]

То же не спорю. Просто такие вещи я обычно пишу на unix и на с, так что повторю еще раз - fork


 
sen   (2002-11-27 16:58) [7]

Спасибо за ответы
В примере чата, приведенном здесь,
http://delphi.mastak.ru/articles/sockadv/index.html
у клиентов неправильно обрабатываются имена подключенных клиентов, если их число больше двух.
Связано ли это с особенностью работы сокетов либо с самим алгоритмом?


 
Digitman   (2002-11-27 17:05) [8]


> Связано ли это с особенностью работы сокетов либо с самим
> алгоритмом?


И с тем и с другим. Пример дерьмовей этого следует еще поискать)
Алгоритм OnRead() в этом примере совершенно не учитывает особенностей работы протокола TCP в условиях глоб.сети.


 
Digitman   (2002-11-27 17:16) [9]

Ох уж этот <Карих Николай> !

Зас..л мозги многим начинающим с Thread.Synchronize(), а теперь еще, ничтоже сумняшеся, начал давать "советы" по "правильной работе" гнезд

Ну где , где там OnWrite() ???


 
sen   (2002-11-27 17:18) [10]

Большое спасибо, теперь более понятно, еще один вопрос,
событие клиентдисконнект у сервера (
ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket) ) происходит только при отключении клиента или при подключении нового клиента также.
Из примера чата видно, что в обоих случаях.



 
Digitman   (2002-11-27 17:23) [11]

данное событие возбуждается при КОРРЕКТНОМ отключении активного клиента (т.е. исключающем случай пьяного бульдозериста, порвавшего ковшом кабель).



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

Форум: "Основная";
Текущий архив: 2002.12.09;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.009 c
1-28040
Cranium
2002-11-30 10:33
2002.12.09
Последовательный запуск программ


3-27836
SashaL
2002-11-20 09:37
2002.12.09
Апгрейд MS SQL Server и Delphi.


1-28128
ProNixp
2002-11-28 17:46
2002.12.09
Файл списков


6-28161
XPatriot()
2002-10-11 13:08
2002.12.09
Почтовые протоколы


6-28182
wer
2002-10-15 14:28
2002.12.09
ОТправка сообщения на компы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский