

| стрелялки |
| спорт |
| драки |
| стратегии |
| гонки |
| логические |
| азартные |
| аркады |
| эротические |
| фильмы онлайн |
| ClientSocket |
|
Рано или поздно к серверу обращается клиент с настоятельной просьбой об обслуживании, а если сервер пользуется популярностью, то подобных просителей наберется немало. В ожидании обслуживания клиенты выстраиваются в очередь, как перед переполненным рестораном. К счастью, интерфейсом WinSock предусмотрен «швейцар», с обязанностями которого превосходно справляются два перегружаемых метода: function Accept(var ClientSocket: TCustomIPClient): boolean; function Accept : boolean; Из череды томящихся в ожидании сеанса клиентских сокетов метод извлекает сокет, занявший очередь первым, и узнает все его паспортные данные (имя хоста, номер порта, тип сокета, режим блокировки). Получив исчерпывающую информацию о потенциальном клиенте, функция Accept() возвратит true - признак того, что клиентский сокет может быть принят на обслуживание. При использовании первого перегружаемого метода дополнительно будет возвращена ссылка на клиент в формальном параметре ClientSock-et: TCustomIPClient. В режиме bmThreadBlocking метод Accept() будет вызван автоматически в тот момент, когда к своим прямым обязанностям приступит поток обслуживания. В момент приема клиента на обслуживание генерируется событие: property OnAccept: TSocketAcceptEvent; type TSocketAcceptEvent = procedure (Sender: TObject; ClientSocket: TCustomIPClient) of object; Это самое важное событие для сервера, где ClientSocket - это ссылка на мечтающий об обслуживании клиентский сокет. Если сервер функционирует врежиме bmThreadBlocking, то событию OnAccept() будет предшествовать событие OnGetThread() , которое вызывается перед тем, как поток управления серверного сокета приступит к созданию потока обслуживания. В этот момент программист может подменить создаваемый по умолчанию поток обслуживания TClientSocketThread своей собственной версией. |
