Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.06.01;
Скачать: CL | DM;

Вниз

работа с TTCPClient   Найти похожие ветки 

 
plotn   (2007-08-24 14:55) [0]

Добрый день, коллеги! Проясните небольшой вопрос.
Я пользуюсь вышенаписанным компонентом. Посылаю запрос к tcp серверу и получаю ответ, делаю так:

tcpClientCS.RemoteHost := наш_хост
   tcpClientCS.RemotePort := наш_порт
 tcpClientCS.Connect;
 if tcpClientCS.Connected then
 begin
   ....
   tcpClientCS.SendBuf(pchar(s)^, length(s), 0);
   ....
   iReceived := tcpClientCS.ReceiveBuf(bytes4[0], 4, 0);

Проблема в следующем. Если данные нам не посылаются, то у меня все приложение "зависает". Т.е. я пытаюсь коннектиться туда, где сервера вообще нету. И превед. Или читаю больше чем дают. Нельзя ли каким либо образом настроить таймаут, что ли, что например после какого то времени была бы ошибка чтения данных?

Спасибо заранее


 
Сергей М. ©   (2007-08-24 15:04) [1]


> Нельзя ли каким либо образом настроить таймаут


Нельзя.
Компонент не предусматривает таймауты.


 
Сергей М. ©   (2007-08-24 15:10) [2]

Чем не угодили TClientSocket, TIdTCPClient ?


 
Eraser ©   (2007-08-24 15:12) [3]


> plotn   (24.08.07 14:55) 


> Если данные нам не посылаются, то у меня все приложение
> "зависает".

так и должно быть, т.к. компоненты indy работают в синхронном режиме. Рекомендую вынести код работы с сетью в доп. поток.

> Или читаю больше чем дают.

это недопустимо.

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

tcpClientCS.ConnectTimeout/ReadTimeout.


 
Сергей М. ©   (2007-08-24 15:20) [4]


> Eraser ©   (24.08.07 15:12) [3]


TTCPClient - это не Инди-компонент, ты перепутал.


 
Eraser ©   (2007-08-24 17:06) [5]


> Сергей М. ©   (24.08.07 15:20) [4]

и точно, пардон.
тогда [2] самый верный совет.


 
plotn   (2007-08-24 20:11) [6]

Тогда посоветуйте пожалуйста. Я не хочу заморачиваться ни с отдельным потоком ни с какими либо дополнительными умствованиями, потому что у меня очень простой проект. Это плугин к IBExpertу, его единственная задача - запуститься, спросить сервер о данных, получить их. Даже если во время скачивания данных проект будет зависать чуток (ну, таймаут) - это мелочь. Т.е. мне нужен всего лишь инструмент для того чтобы выкачать данные, что мне нужны, если они ошибочны или связь плохая - сказать об этом, не зависая навсегда. Короче говоря, языком этого компонента мне нужно: адрес, порт, коннект, коннектед, врайт, реад; ну и все пожалуй. Т.е. хотелось бы сразу чтобы вы ткнули носом в те свойства, которые мне нужны.
Спасибо за терпение.


 
plotn   (2007-08-24 20:20) [7]

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


 
Eraser ©   (2007-08-27 15:17) [8]


> plotn   (24.08.07 20:11) [6]

TIdTcpClient отлично подойдет для этих целей.

> plotn   (24.08.07 20:20) [7]


> допустим, файл. Т.е. я прошу - дайте мне икс байт, оно мне
> дает. Я сравниваю размер того, что мне дадено с тем что
> я просил и, если дали меньше, предполагаю

тут от прикладного протокола зависит конечно, чаще всего сначала сервер отсылает размер данных, которые нужно принять, а потом сами данные.


 
Сергей М. ©   (2007-08-27 15:27) [9]


> не хочу заморачиваться ни с отдельным потоком ни с какими
> либо дополнительными умствованиями


Ну тогда пользуй TIdTCPClient + TIdAntifreeze - этот "джентельменский набор"  как раз и создан для тех кто не хочет "заморачиваться" и "умствовать".



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

Текущий архив: 2008.06.01;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
2-1209735021
Kostafey
2008-05-02 17:30
2008.06.01
Как установить курсор в TTable на определенную запись ?


3-1198774033
arseny
2007-12-27 19:47
2008.06.01
Передача DataSet ов по сети (аналог технологии в ADO.NET)


2-1210273581
markus
2008-05-08 23:06
2008.06.01
изменить иконку в любой программе


2-1210342406
DooRs
2008-05-09 18:13
2008.06.01
Формула


4-1190096968
roughneck
2007-09-18 10:29
2008.06.01
Как определить букву диска флешки?