![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как задать TimeOut на TcpClient.Connect
skosenok © (2006-10-17 11:23:00)Если устройство подключено в сеть то TcpClient.Connect обрабатывается быстро
Если устройство отключено то TcpClient.Connect ждет очень долго пока выдаст результат
Как ограничить время ожидания когда устройство отключено.
Сергей М. (2006-10-20 14:31:00) [1]
> skosenok © (20.10.06 13:15) [43]
> купился на WaitForData
С какого перепугу он там будет ?
Это есть метод TWinSocketStream(), который в кач-ве параметра при конструировании
требует TCustomWinSocket.
> skosenok © (20.10.06 13:18) [44]
Мне кажктся, ты запутался в блок. и неблок. режимах.
А это немаловажно в пределах конкретно твоейзадачи.
skosenok (2006-10-20 13:18:00) [2]хотя понятно что WaitForData я могу организовать и сам selectamи - но тогда как раз не хочется гимороиться
skosenok (2006-10-20 13:15:00) [3]>Сергей М. © (20.10.06 12:31) [42]
кросплатформенность мне нафиг не нужна... по крайней мере пока
я купился на WaitForData которого в TClientSocket нет.
еще TCPClient есть в бесплатной версии Delphi =)
Сергей М. (2006-10-20 12:31:00) [4]
> skosenok © (20.10.06 12:01) [41]
Зачем тебе этот геморрой с TCPClient'ом - ума не приложу.
Есть же TClientSocket (чисто виндовый, с асинхр.нотификациями), TIdTCPClient (кросплатформенный) ..
skosenok (2006-10-20 12:01:00) [5]>Сергей М. © (20.10.06 11:33) [40]
в нем проверяется Active, а у нас, как ты сам всем объяснил, в асинхронном режиме все контролируем нами и поэтому Active = ложь
Сергей М. (2006-10-20 11:33:00) [6]
> skosenok © (20.10.06 11:28) [39]
Хм ...
Тот же вызов closesocket() происходит и при вызове метода TBaseSocket.Close.
skosenok (2006-10-20 11:28:00) [7]Все поборол функцией closesocket(TcpClient.Handle);
skosenok (2006-10-20 11:21:00) [8]анализ показал что ошибка вроде происходит при очистке в клиенте вызовом WSACleanup
skosenok (2006-10-20 10:58:00) [9]>Значит у тебя ошибка в реализации сервера.
сервер - компонент TServerSocket
без единой моей строчки кода
Сергей М. (2006-10-20 10:33:00) [10]
> как убить/закрыть асинхронное (bmNonBlocking) соединение
Как и любое другое - TTcpClient.Close.
> ошибка 10053 на сервере
Значит у тебя ошибка в реализации сервера.
skosenok (2006-10-20 10:32:00) [11]те под закрытием клиента я имею ввиду завершение приложения
skosenok (2006-10-20 10:28:00) [12]Вылезла последняя проблема - как убить/закрыть асинхронное (bmNonBlocking) соединение
видно Disconect не помогает
так как сколько раз я открываю соединение на столько раз и выскочит ошибка 10053 на сервере при закрытии клиента
Сергей М. (2006-10-19 13:52:00) [13]
> skosenok © (19.10.06 13:20) [32]
В этом случае все что ты можешь предпринять - вызывать connect() циклически в течение требуемого тебе времени.
skosenok (2006-10-19 13:20:00) [14]>Сергей М. © (19.10.06 13:04) [31]
>Ничерта не понял .
ставим TimeOut=5000
те я вызываю connect когда еще устройство выключено... а потом на 2 секунде устройство включается... но так как оно с самого начала было выключено
связь не установиться
Сергей М. (2006-10-19 13:04:00) [15]
> skosenok © (19.10.06 12:53) [30]
> жаль что эта функция подключит сокет только если он был
> включен перед запуском установки связи (а не после в течении
> времени ожидания)
??
Ничерта не понял ..
> могу ли я после успешной установки connecta вернуть значение
> bmBlocking без каких либо последующих проблем в обмене информацией
Нет, не можешь. К сожалению.
На то и кроссплатформенность фигурирует.
skosenok (2006-10-19 12:53:00) [16]>Сергей М. © (19.10.06 11:11) [22]
огромное спасибо... именно этого я ждал три дня
прошу прощения за излишнею эмоциональность
жаль что эта функция подключит сокет только если он был включен перед запуском установки связи (а не после в течении времени ожидания)
последний вопрос... могу ли я после успешной установки connecta вернуть значение bmBlocking без каких либо последующих проблем в обмене информацией
Сергей М. (2006-10-19 12:48:00) [17]
> SpellCaster (19.10.06 12:37) [28]
При прочих равных условиях я бы согласился.
SpellCaster (2006-10-19 12:37:00) [18]Не лучше ли в таком случае заюзать tclientsocket и не парить себе мозг? ;)
Сергей М. (2006-10-19 11:21:00) [19]
> Dmitrij_K (19.10.06 11:19) [25]
Угу... Точнее - контроль за результатами вызовов неблокирующих транспортных функций.
Dmitrij_K (2006-10-19 11:20:00) [20]
> Сергей М. © (19.10.06 11:16) [23]
>
> TTCPClient написан нормально.
> Но поскольку он позиционируется как кроссплатформенный компонент,
> в нем не реализована логика асинхронных нотификаций о транспортных
> событиях гнезда, ибо она специфична лишь для Win-платформы.
>
> Т.е. в неблок.режиме для получения полной функциональной
> аналогии с TClientSocket требуется чуть-чуть подумать головой
> и приложить ручки в части реализации недостающих (но столь
> привычных) возможностей.
>
Ага. ясно.
спасибо