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");