На этом шаге мы рассмотрим использование серверных сокетов.
Одного компонента TServerSocket, если его поместить на форму приложения, достаточно для того, чтобы ваше приложение превратилось в сервер, работающий по протоколу TCP/IP. В процессе работы этот компонент будет использовать один экземпляр объекта TServerWinSocket, необходимый для прослушивания порта и по одному экземпляру TServerClientWinSocket для каждого открытого соединения с сокетом клиента. Серверный компонент выполняет следующие задачи:
Перед началом работы, серверному сокету нужно задать номер порта, который он будет слушать. Номер задается в свойстве Port или неявным образом, если в свойстве Service вы указываете имя используемой службы.
Вы можете открыть слушающее соединение во время исполнения, если вызовете метод Open. Если при разработке программы вы укажете в свойстве Active значение True, то при запуске программы, слушающий сокет будет активизироваться автоматически.
Слушающий сокет автоматически обслуживает запрос клиентского сокета на соединение. При этом вызывается событие OnClientConnect.
Данные о слушающем соединении и активных соединениях вы можете получить из составного свойства Socket. Объекты, обслуживающие активные соединения, помещаются в свойстве Connections. Используя свойство ActiveConnections, в котором указывается общее число открытых соединений, вы можете обращаться к нужному объекту в массиве Connections по индексу; значение индекса должно изменятся от 0 до ActiveConnections-1.
Закрываются серверные соединения вызовом метода Close. При этом завершаются все открытые соединения, удаляются из очереди все запросы на открытие соединения, и закрывается слушающее соединение. Клиент, в свою очередь, может сам закрыть свое соединение, что не помешает работе других активных соединений, - в этом случае в серверном сокете инициируется событие OnClientDisconnect.
На следующем шаге мы рассмотрим работу с событиями сокетов.