IPConnection.Send

From SunFlurry wiki
Jump to: navigation, search
  Send (Обмен данными)
Объект:Объект IP
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Нет
Исключения:Невозможно превратить в число, разрыв соединения, системная ошибка
Визуальность:Нет

TCP/IP функция отсылает часть строки по установленному соединению. Длина строки не отсылается. Функцию можно использовать только для не блокирующих, не шифрованных соединений. Функция отсылает столько информации, сколько может принять буфер операционной системы, и, после этого сразу возвращает количество отосланных байт. Никакого внутреннего ожидания не выполняется. Функция работает быстрее других функций отправки, однако, требует создания дополнительного цикла ожидания готовности с помощью функции Wait.

Синтаксис

IPConnection.Send(<Строка для отправки (STRING)>):<Количество байтов, которое было отправлено (INT)>

Аргументы

  • <Строка для отправки (STRING)> - Строка, в формате ANSI, информацию из которой необходимо отправить. Информация может быть бинарной.

Возвращаемое значение

Возвращается количество отправленных байтов, которое может быть меньше, чем размер отправляемой строки.

Примеры

//Пример функции отсылки содержимого буфера при неблокирующем соединении
//Обычно, к примеру, для прокси соединений, для полного дуплекса, чтение осуществляется одновременно с записью, поэтому, для прокси соединения эту функцию было бы необходимо изменить 
Function ОтослатьБуфер(Буфер,Сокет)
  Size:=Буфер.Size();
  iPos:=0;
  While iPos<Буфер.Size() Do
    Size2:=Min(Size-iPos,2048);
    Стр:=Буфер.GetString(iPos,Size2);
    Size3:=Сокет.Send(Стр);
    iPos:=iPos+Size3;
    //Ожидание доступности внутреннего буфера операционной системы
    //Без этого цикла ожидания, функция будет использовать всё время одного ядра процессора, пока будет происходить отправка
    //Остальные функции группы Send/Receive (кроме Receive), включают в себя такой цикл ожидания
    If Size3<Size2 Then
      Сокет.Wait(50,2);
    EndIf;
  EndDo;
EndFunction