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

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

Как задать TimeOut на TcpClient.Connect


Страницы:   1 2 3

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 требуется чуть-чуть подумать головой
> и приложить ручки в части реализации недостающих (но столь
> привычных) возможностей.
>

Ага. ясно.
спасибо


Страницы:   1 2 3

Наверх

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