![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Indy. TidTCPClient - где ошибка?
Jao © (2003-07-02 14:58:00)
Сервер:
st:=ReadLn;
fs:=Tfilestream.create(filename,fmcreate);
ReadStream(fs,-1,true);
fs.Free;
WriteLn("1");
Клиент:
WriteLn("0");
fs:=Tfilestream.create(filename,fmopenread);
WriteStream(fs,true,false,0);
fs.free;
st:=ReadLn;
----
- убираю последнюю строку *st:=ReadLn* и всё работает, иначе виснет
Digitman (2003-07-03 11:43:00) [1]
> vuk
может быть.
в подробности не вникал.
а вот по поводу префикса размера сообщения - ценный совет автору
Jao (2003-07-03 10:27:00) [2]
>vuk
>установка в true параметра ReadUntilDisconnected на сервере
да Оно - теперь работает.
Спасибо всем!!!
vuk (2003-07-02 18:01:00) [3]
to Jao:
Сомнение вызывает установка в true параметра ReadUntilDisconnected на сервере. Я бы на Вашем месте сначала передал длину потока и тогда можно было бы точно знать сколько байт ожидать при передаче.
to Digitman:
>совет прост - выноси работу с TidTCPClient в доп.код.поток,
>организовав там цикл выборки/диспетчеризации win-сообщений.
У него же Indy... Там все работает в блокирующем режиме и сообщения Windows не используются.
Jao (2003-07-02 17:38:00) [4]
> Digitman
всё уже давно в доп.код.потоке, а насчет "выборки/диспетчеризации win-сообщений" - для меня это темный лес - тупая я сволочь, хех :)))
Digitman (2003-07-02 17:29:00) [5]
> по идее, должно быть предусмотрено в компоненте
по твоей идее, заметь.
но не по идее MS.
совет прост - выноси работу с TidTCPClient в доп.код.поток, организовав там цикл выборки/диспетчеризации win-сообщений. В основном же код.потоке выполняй на здоровье свои ReadLn() - "виснуть" ничего не будет.
Jao (2003-07-02 17:21:00) [6]
откуда я знаю какое сообщение отвечает за приход данных на сокет, хоть бы кусочек кода скинул :o) да и не хотелось бы так глубоко копать, когда это, по идее, должно быть предусмотрено в компоненте
Digitman (2003-07-02 17:12:00) [7]
причем здесь событие ? я - о сообщениях Windows
Jao (2003-07-02 17:03:00) [8]
>Digitman
это всё так, но проблема в том что в TidTCPClient нет сообытия на приход сообщения, в отличии от TTCPClient *во всяком случае я не нашел*
Digitman (2003-07-02 15:42:00) [9]
> Jao
ну да, замечательно занимается ... а в это время кодовый поток, "замечательно занятый" исполнением ReadLn(), не занимается ожиданием/диспетчеризацией/обработкой оконных сообщений
Jao (2003-07-02 15:27:00) [10]
в TidTCPClient ReadLn занимается принятием строки, причем в демопримере по Indy он этим занимается замечательно :)
Digitman (2003-07-02 15:17:00) [11]
ты в курсе , чем занимается ReadLn() ?
ты в курсе "новостей", которые привнес в мир программирования механизм сообщений Windows ?