Difference between revisions of "IPConnection.ListenUSR1"
m (1 revision imported) |
|
(No difference)
|
Latest revision as of 07:51, 7 February 2021
ListenUSR1 (Серверные соединения) | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Функция создает USR1 TCP/IP сервер на указанном порту. После установки внешнего соединения, система инициирует вызов указанной функции. Функция будет выполнена в корневом потоке. Если корневой поток в это время будет занят, система будет ожидать его освобождения, по время ожидания, принятие новых соединений будет приостановлено, соединения будут ждать в очереди операционной системы (размер очереди задан системой по умолчанию). Вызов Disconnect или удаление объекта из системы автоматически закрывает сервер и освобождает порт. См. также статью USR1 протокол.
Синтаксис
IPConnection.ListenUSR1(<Порт сокета (INT)>,<Пароль USR1 соединения (STRING)>,<Функция глобального модуля, вызываемая при установке соединения (STRING)>,<Тип соединения (INT)>=0):<Объект сервера (IPOBJECT)>
Аргументы
<Порт сокета (INT)>
- Номер порта, для которого открывается серверный сокет. Номер может принимать значения от 1 до 65535. Если порт уже занят в системе (сервером или клиентом), он не может быть повторно открыт, в таком случае, функция вызовет исключение. Один и тот же порт может быть открыт одновременно для IPv4 и IPv6.<Пароль USR1 соединения (STRING)>
- USR1 соединение использует простой пароль для аутентификации.<Функция глобального модуля, вызываемая при установке соединения (STRING)>
- Аргумент задает наименование функции из любого из глобальных модулей, которая будет вызвана в момент появления в очереди нового соединения. Функция имеет три параметра и является функцией OnUsr1Connection.<Тип соединения (INT)>
- (необязательный аргумент) Указывает на тип (протокол) соединения. Доступны следующие значения аргумента:- 0 (по умолчанию) -- Будет использован протокол IPv4
- 1 -- Будет использован протокол IPv6
Возвращаемое значение
Возвращается новый серверный объект IP. В момент удаления этого объекта из системы, сервер будет также удален и удерживаемый порт освобожден.
Примеры
//Пример USR1 серверной части обмена. Function OnUsr1Connection(Соединение,Параметр,спФайлы) Export If Параметр="GETPRINTERS" Then //Запрос на список принтеров от клиента Соединение.SendCmd("OK "); //Получаем список принтеров Стр:=GetDefaultPrinter; Стр0:=Uppercase(Стр); Try aList:=GetInstalledPrinters(); For i:=1 To aList.Size() Do If Стр0<>Uppercase(aList.Get(i)) Then Стр:=Стр+?(Стр<>"",_NEWLINE)+aList.Get(i); EndIf; EndDo; Except EndTry; Соединение.SendStr(Стр); Соединение.Disconnect(); Exit; ElseIf ... EndIf; //Неизвестный режим, разрываем связь Соединение.SendCmd("BAD "); Соединение.Disconnect(); EndFunction; аСервер:=IPConnection.OnUsr1Connection(8000,"Pass123","OnUSR1Connection"); //Вечный цикл, во время которого можно выполнять другие действия (к примеру, сервер консоли), в данном случае, мы ожидаем новые соединения. While 1 Do Sleep(100); EndDo;