Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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 ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо