Difference between revisions of "IPConnection.Accept"
m (1 revision imported) |
|
(No difference)
| |
Latest revision as of 07:51, 7 February 2021
| Accept (Серверные соединения) | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||
Функция используется для серверных объектов, созданных функцией ListenEx и позволяет получать новое клиентское подключение ожидающее в очереди подключений операционной системы. Если клиентские подключения в очереди отсутствуют, функция возвращает пустое значение. Обычно функция вызывается в цикле с ожиданием, создающимся функцией Wait.
Синтаксис
IPConnection.Accept():<Объект нового клиента или пустое значение (IPOBJECT)>
Возвращаемое значение
Возвращается новый клиентский объект IP, либо пустое значение, если новое подключение не ожидает в очереди.
Примеры
//Данный пример совмещает серверную и клиентскую часть в одном фрагменте кода.
//Серверная часть получает http запрос и отдает его, добавляя одно поле, после чего клиентская часть получает пакет и выводит его в лог
аСервер:=IPConnection.ListenEx(8000);
URL:="http://127.0.0.1:8000";
//Инициализация и отсылка пакета
If pos("//",URL)>0 Then
tearStr(URL,"//");
EndIf;
СтрДоб:=URL;
URL:=tearStr(СтрДоб,"/");
tcp:=IPConnection.Connect(URL);
if not tcp.IsConnected Then
Message("Ошибка соединения с сервером!","!");
Exit;
EndIf;
СтрДоб:="/"+СтрДоб;
tcp.HTTPSetOperation("GET "+СтрДоб+" HTTP/1.0");
tcp.HTTPSetHeaderField("Host",tcp.HTTPPunycodeEncode(URL));
tcp.HTTPSetHeaderField("User-Agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
tcp.HTTPSetHeaderField("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
tcp.HTTPSetHeaderField("Accept-Language","en");
tcp.HTTPSetHeaderField("Connection","Close");
If not tcp.HTTPSend Then
Message("Ошибка отправки запроса клиентом!","!");
exit;
EndIf;
Message("Клиент отослал запрос: "+_NEWLINE+tcp.HTTPHeaderAsString);
//Очистим заголовок, чтобы убедиться, что он придет назад с сервера
tcp.HTTPClear();
//Ожидаем пакета на сервере
While 1 Do
аСервер.Wait(10,4);
аКлиент:=аСервер.Accept();
If not isEmpty(аКлиент) Then
Break;
EndIf;
EndDo;
Message("Сигнал от: "+аКлиент.PeerAddress,"I");
If not аКлиент.HTTPReceiveHeader Then
Message("Ошибка получения запроса сервером!","!");
exit;
EndIf;
//Добавим к принятому заголовку дополнительное поле
аКлиент.HTTPSetHeaderField("Hello","World");
//Отсылаем назад принятый заголовок
If not аКлиент.HTTPSend Then
Message("Ошибка отправки ответа сервером!","!");
exit;
EndIf;
Message("Успешный обмен (сервер)!","I");
аКлиент.Disconnect();
//Получение ответа клиентом
If not tcp.HTTPReceive Then
Message("Ошибка получения ответа клиентом!","!");
exit;
EndIf;
Message("Клиент получил ответ: "+_NEWLINE+tcp.HTTPHeaderAsString);
Message("Успешный обмен (клиент)!","I");