Форум: "Сети";
Текущий архив: 2008.06.01;
Скачать: [xml.tar.bz2];
Внизработа с 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.047 c