Difference between revisions of "IPConnection.Disconnect"

From SunFlurry wiki
Jump to: navigation, search
1>Admin
m (1 revision imported)
 
(No difference)

Latest revision as of 19:07, 20 November 2021

  Disconnect (Разорвать соединение)
Объект:Объект IP
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Нет
Исключения:Системная ошибка
Визуальность:Нет

Функция выполняет разрыв связи для TCP/IP соединения, также освобождает слушающий порт и удаляет сервер, если это соединение серверное.

Синтаксис

IPConnection.Disconnect(<Быстрое закрытие соединения (INT)>=0)

Аргументы

  • <Быстрое закрытие соединения (INT)> - Аргумент позволяет закрыть соединение быстро, но, возможно, не в полной мере корректно. Корректно закрытое соединение получает остатки данных, посылаемых сервером, что может замедлить закрытие соединения для некоторых типов серверов. Рекомендуется использовать обычное (медленное) закрытие соединения, если это не вызывает замедления работы. По умолчанию, при удалении объекта, система использует медленное закрытие соединения.

Примеры

//Данный пример совмещает серверную и клиентскую часть в одном фрагменте кода.
//Серверная часть получает 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");