асинхронная работа с сетью
Извиняюсь, если он уже есть - не нашел.
Есть 1 сервер и N клиентов в сети. Задача: быстро опросить клиенты.
Опрос ведется через TIdTCPClient. При доступности всех клиентов опрос происходит быстро, но если клиент недоступен, то прога ждет и резко теряет в скорости.
Хочется реализовать следующее: в асинхронном режиме проверить все клиенты на наличие открытого порта и проверять коннектом только открытые.
Спасибо.
Цитата: Sania
Собственно прошу привести пример асинхронной работы с сетью.
Извиняюсь, если он уже есть - не нашел.
Есть 1 сервер и N клиентов в сети. Задача: быстро опросить клиенты.
Опрос ведется через TIdTCPClient. При доступности всех клиентов опрос происходит быстро, но если клиент недоступен, то прога ждет и резко теряет в скорости.
Извиняюсь, если он уже есть - не нашел.
Есть 1 сервер и N клиентов в сети. Задача: быстро опросить клиенты.
Опрос ведется через TIdTCPClient. При доступности всех клиентов опрос происходит быстро, но если клиент недоступен, то прога ждет и резко теряет в скорости.
Видишь ли в чем загвоздка - Indy не поддерживает асинхронную работу с сокетами изначально (ну не задумана она так работать). Поэтому используй для асинхронной работы с сокетами какую нибудь другую библиотеку. [COLOR=Gray](Хотя нет, вру... :) Приделали таки туда костыль по имени IdAntifreeze - но от него толку :()[/COLOR]
Цитата:
Хочется реализовать следующее: в асинхронном режиме проверить все клиенты на наличие открытого порта и проверять коннектом только открытые.
Что-то не совсем понял :confused: Если есть коннект с клиентом - клиентский сокет открыт (читай - существует). Если нет...
Лучше всего использовать Socket'ы. Их программирования конечно посложней Indy, но это того стоит.
Для программирования сокетов тебе потребуется заголовочный файл WinSock2.pas (можно просто WinSock.pas, но это уже старая версия).
Возможно потребуются другие файлики (ws2tcpip.inc, wsipx.inc, wlink.inc и
wsnetbs.inc), но обычно одного этого хватает.
Для начала работы с сокетами их нужно инициализировать
WSAStartup-иниц. сокета.
Затем подготовить разъемы и можно работать. (правильная реализация всего этого в совокупности дает офигительную скорость)
Да насчет функций из WinSock и как вообще с ним работать. Доков на эту тему предостаточно и думаю тебе не составит труда достать нужную инфу. Я конечно мог бы привести все необходимые шаги для твоей проги с клиентами, но это займет много места (с комментами).
Удачи тебе.