Difference between revisions of "IPConnection.Receive"
(No difference)
|
Revision as of 08:23, 24 April 2020
| Receive (Обмен данными) | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||
TCP/IP функция получает данные в ANSI-строку по установленному соединению. Данные могут представлять собой бинарную информацию. Функцию можно использовать только для не блокирующих, не шифрованных соединений. Функция получает столько информации, сколько в данный момент ожидает в буфере операционной системы, и, после этого сразу возвращает управление. Никакого внутреннего ожидания не выполняется. Функция работает быстрее других функций получения, однако, требует создания дополнительного цикла ожидания готовности данных с помощью функции Wait. Функция может вернуть пустую строку, если в данный момент в буфере системы нет никакой информации. Если произошел разрыв связи, функция вызывает исключение.
Синтаксис
IPConnection.Receive(<Максимальный размер данных в байтах (INT)>):<Полученная строка (STRING)>
Аргументы
<Максимальный размер данных в байтах (INT)>- (необязательный аргумент) Аргумент задает максимальный размер получаемых данных.
Возвращаемое значение
Возвращается полученные данные из буфера системы, в виде строки ANSI.
Примеры
//Пример функции получения информации в виде буфера при неблокирующем соединении
//Обычно, к примеру, для прокси соединений, для полного дуплекса, чтение осуществляется одновременно с записью, поэтому, для прокси соединения эту функцию было бы необходимо изменить
Function ПринятьБуфер(Размер,Сокет)
Буфер:=Buffer.Create();
iPos:=0;
While iPos<Размер Do
Size2:=Min(Размер-iPos,2048);
Стр:=Сокет.Receive(Size2);
If Length(Стр)>0 Then
Буфер.SetString(iPos,Стр);
iPos:=iPos+Length(Стр);
Continue;
EndIf;
Сокет.Wait(50,1);
EndDo;
Exit Буфер;
EndFunction