Поделиться через


Socket.ReceiveAsync Метод

Определение

Перегрузки

ReceiveAsync(ArraySegment<Byte>)

Получает данные из подключенного сокета.

ReceiveAsync(IList<ArraySegment<Byte>>)

Получает данные из подключенного сокета.

ReceiveAsync(SocketAsyncEventArgs)

Начинает выполнение асинхронного запроса, чтобы получить данные из подключенного объекта Socket.

ReceiveAsync(ArraySegment<Byte>, SocketFlags)

Получает данные из подключенного сокета.

ReceiveAsync(IList<ArraySegment<Byte>>, SocketFlags)

Получает данные из подключенного сокета.

ReceiveAsync(Memory<Byte>, CancellationToken)

Получает данные из подключенного сокета.

ReceiveAsync(Memory<Byte>, SocketFlags, CancellationToken)

Получает данные из подключенного сокета.

ReceiveAsync(ArraySegment<Byte>)

Исходный код:
Socket.Tasks.cs
Исходный код:
Socket.Tasks.cs
Исходный код:
Socket.Tasks.cs

Получает данные из подключенного сокета.

public:
 System::Threading::Tasks::Task<int> ^ ReceiveAsync(ArraySegment<System::Byte> buffer);
public System.Threading.Tasks.Task<int> ReceiveAsync (ArraySegment<byte> buffer);
member this.ReceiveAsync : ArraySegment<byte> -> System.Threading.Tasks.Task<int>
Public Function ReceiveAsync (buffer As ArraySegment(Of Byte)) As Task(Of Integer)

Параметры

buffer
ArraySegment<Byte>

Буфер для полученных данных.

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

Асинхронная задача, которая завершается с количеством полученных байтов.

Исключения

Socket был закрыт.

Произошла ошибка при попытке доступа к сокету.

Применяется к

ReceiveAsync(IList<ArraySegment<Byte>>)

Исходный код:
Socket.Tasks.cs
Исходный код:
Socket.Tasks.cs
Исходный код:
Socket.Tasks.cs

Получает данные из подключенного сокета.

public:
 System::Threading::Tasks::Task<int> ^ ReceiveAsync(System::Collections::Generic::IList<ArraySegment<System::Byte>> ^ buffers);
public System.Threading.Tasks.Task<int> ReceiveAsync (System.Collections.Generic.IList<ArraySegment<byte>> buffers);
member this.ReceiveAsync : System.Collections.Generic.IList<ArraySegment<byte>> -> System.Threading.Tasks.Task<int>
Public Function ReceiveAsync (buffers As IList(Of ArraySegment(Of Byte))) As Task(Of Integer)

Параметры

buffers
IList<ArraySegment<Byte>>

Список буферов для полученных данных.

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

Асинхронная задача, которая завершается с количеством полученных байтов.

Исключения

Параметр buffers имел значение NULL.

Socket был закрыт.

Произошла ошибка при попытке доступа к сокету.

Комментарии

Этот метод сохраняет в задаче все исключения, не относящиеся к использованию, которые может создавать синхронный аналог метода. Если исключение сохраняется в возвращаемой задаче, это исключение будет создано при ожидании задачи. Исключения использования, такие как ArgumentException, по-прежнему создаются синхронно. Хранимые исключения см. в разделе исключения, создаваемые Receive(IList<ArraySegment<Byte>>).

Применяется к

ReceiveAsync(SocketAsyncEventArgs)

Исходный код:
Socket.cs
Исходный код:
Socket.cs
Исходный код:
Socket.cs

Начинает выполнение асинхронного запроса, чтобы получить данные из подключенного объекта Socket.

public:
 bool ReceiveAsync(System::Net::Sockets::SocketAsyncEventArgs ^ e);
public bool ReceiveAsync (System.Net.Sockets.SocketAsyncEventArgs e);
member this.ReceiveAsync : System.Net.Sockets.SocketAsyncEventArgs -> bool
Public Function ReceiveAsync (e As SocketAsyncEventArgs) As Boolean

Параметры

e
SocketAsyncEventArgs

Объект SocketAsyncEventArgs для использования в данной асинхронной операции сокета.

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

true, если операция ввода-вывода находится в состоянии ожидания. По завершении операции создается событие Completed в параметре e.

false, если операция ввода-вывода завершена синхронно. В данном случае событие Completed на параметре e не будет создано и объект e, передаваемый как параметр, можно изучить сразу после получения результатов вызова метода для извлечения результатов операции.

Исключения

Аргумент был недопустимым. Свойства Buffer или BufferList на параметре e должны ссылаться на допустимые буферы. Может быть установлено одно из этих свойств, но нельзя одновременно устанавливать оба свойства.

Операция сокета уже выполнялась с использованием объекта SocketAsyncEventArgs, указанного в параметре e.

Socket был закрыт.

Произошла ошибка при попытке доступа к сокету.

Комментарии

Метод ReceiveAsync используется в подключенных или ограниченных сокетах без подключения и используется для чтения входящих данных. Локальный адрес сокета должен быть известен.

Для ограниченных сокетов без подключения эта функция ограничивает адреса, с которых принимаются сообщения. Функция возвращает сообщения только с удаленного адреса, указанного в соединении. Сообщения с других адресов отклоняются автоматически.

Свойство SocketAsyncEventArgs.SocketFlags параметра e предоставляет поставщику службы Window Sockets дополнительные сведения о запросе на чтение. Дополнительные сведения об использовании этого параметра см. в разделе System.Net.Sockets.SocketFlags.

Для успешного System.Net.Sockets.SocketAsyncEventArgs вызова этого метода требуются следующие свойства и события объекта :

Вызывающий объект может задать SocketAsyncEventArgs.UserToken для свойства любой объект пользовательского состояния, необходимый перед вызовом ReceiveAsync метода , чтобы данные можно было получить в методе обратного вызова. Если для обратного вызова требуется больше сведений, чем для одного объекта, можно создать небольшой класс для хранения других необходимых сведений о состоянии в качестве членов.

Для сокетов в стиле байтового потока входящие данные помещаются в буфер до заполнения буфера, закрытия соединения или исчерпания внутренне буферированных данных.

Для сокетов, ориентированных на сообщения, входящее сообщение помещается в буфер до общего размера буфера, связанного с параметром e . Если сообщение больше буфера, буфер заполняется первой частью сообщения.

Для сокетов, ориентированных на подключение, метод может указать корректное завершение виртуальной цепи одним из двух способов, зависящих от того, ReceiveAsync является ли сокет потоком байтов или ориентирован на сообщения. Для байтовых потоков ноль считанных байтов означает корректное закрытие и то, что больше байтов никогда не будет прочитано. Для сокетов, ориентированных на сообщения, где сообщение с нулевым байтом часто допускается, SocketException для обозначения корректного закрытия используется сокет с SocketAsyncEventArgs.SocketError собственным кодом ошибки Winsock WSAEDISCON (10101). В любом случае объект SocketException с SocketAsyncEventArgs.SocketError собственным кодом ошибки Winsock WSAECONNRESET (10054) указывает на прерывание закрытия.

См. также раздел

Применяется к

ReceiveAsync(ArraySegment<Byte>, SocketFlags)

Исходный код:
Socket.Tasks.cs
Исходный код:
Socket.Tasks.cs
Исходный код:
Socket.Tasks.cs

Получает данные из подключенного сокета.

public:
 System::Threading::Tasks::Task<int> ^ ReceiveAsync(ArraySegment<System::Byte> buffer, System::Net::Sockets::SocketFlags socketFlags);
public System.Threading.Tasks.Task<int> ReceiveAsync (ArraySegment<byte> buffer, System.Net.Sockets.SocketFlags socketFlags);
member this.ReceiveAsync : ArraySegment<byte> * System.Net.Sockets.SocketFlags -> System.Threading.Tasks.Task<int>
Public Function ReceiveAsync (buffer As ArraySegment(Of Byte), socketFlags As SocketFlags) As Task(Of Integer)

Параметры

buffer
ArraySegment<Byte>

Буфер для полученных данных.

socketFlags
SocketFlags

Побитовая комбинация значений SocketFlags, которая будет использоваться при получении данных.

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

Асинхронная задача, которая завершается с количеством полученных байтов.

Исключения

Socket был закрыт.

Произошла ошибка при попытке доступа к сокету.

Применяется к

ReceiveAsync(IList<ArraySegment<Byte>>, SocketFlags)

Исходный код:
Socket.Tasks.cs
Исходный код:
Socket.Tasks.cs
Исходный код:
Socket.Tasks.cs

Получает данные из подключенного сокета.

public:
 System::Threading::Tasks::Task<int> ^ ReceiveAsync(System::Collections::Generic::IList<ArraySegment<System::Byte>> ^ buffers, System::Net::Sockets::SocketFlags socketFlags);
public System.Threading.Tasks.Task<int> ReceiveAsync (System.Collections.Generic.IList<ArraySegment<byte>> buffers, System.Net.Sockets.SocketFlags socketFlags);
member this.ReceiveAsync : System.Collections.Generic.IList<ArraySegment<byte>> * System.Net.Sockets.SocketFlags -> System.Threading.Tasks.Task<int>
Public Function ReceiveAsync (buffers As IList(Of ArraySegment(Of Byte)), socketFlags As SocketFlags) As Task(Of Integer)

Параметры

buffers
IList<ArraySegment<Byte>>

Список буферов для полученных данных.

socketFlags
SocketFlags

Побитовая комбинация значений SocketFlags, которая будет использоваться при получении данных.

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

Асинхронная задача, которая завершается с количеством полученных байтов.

Исключения

Параметр buffers имел значение NULL.

Socket был закрыт.

Произошла ошибка при попытке доступа к сокету.

Комментарии

Этот метод сохраняет в задаче все исключения, не относящиеся к использованию, которые может создавать синхронный аналог метода. Если исключение сохраняется в возвращаемой задаче, это исключение будет создано при ожидании задачи. Исключения использования, такие как ArgumentException, по-прежнему создаются синхронно. Хранимые исключения см. в разделе исключения, создаваемые Receive(IList<ArraySegment<Byte>>, SocketFlags).

Применяется к

ReceiveAsync(Memory<Byte>, CancellationToken)

Исходный код:
Socket.Tasks.cs
Исходный код:
Socket.Tasks.cs
Исходный код:
Socket.Tasks.cs

Получает данные из подключенного сокета.

public System.Threading.Tasks.ValueTask<int> ReceiveAsync (Memory<byte> buffer, System.Threading.CancellationToken cancellationToken = default);
member this.ReceiveAsync : Memory<byte> * System.Threading.CancellationToken -> System.Threading.Tasks.ValueTask<int>
Public Function ReceiveAsync (buffer As Memory(Of Byte), Optional cancellationToken As CancellationToken = Nothing) As ValueTask(Of Integer)

Параметры

buffer
Memory<Byte>

Буфер для полученных данных.

cancellationToken
CancellationToken

Маркер отмены, который можно использовать для отмены асинхронной операции.

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

Асинхронная задача, которая завершается с количеством полученных байтов.

Исключения

Socket был закрыт.

Произошла ошибка при попытке доступа к сокету.

Маркер отмены был отменен. Это исключение сохраняется в возвращаемой задаче.

Применяется к

ReceiveAsync(Memory<Byte>, SocketFlags, CancellationToken)

Исходный код:
Socket.Tasks.cs
Исходный код:
Socket.Tasks.cs
Исходный код:
Socket.Tasks.cs

Получает данные из подключенного сокета.

public System.Threading.Tasks.ValueTask<int> ReceiveAsync (Memory<byte> buffer, System.Net.Sockets.SocketFlags socketFlags, System.Threading.CancellationToken cancellationToken = default);
member this.ReceiveAsync : Memory<byte> * System.Net.Sockets.SocketFlags * System.Threading.CancellationToken -> System.Threading.Tasks.ValueTask<int>
Public Function ReceiveAsync (buffer As Memory(Of Byte), socketFlags As SocketFlags, Optional cancellationToken As CancellationToken = Nothing) As ValueTask(Of Integer)

Параметры

buffer
Memory<Byte>

Буфер для полученных данных.

socketFlags
SocketFlags

Побитовая комбинация значений SocketFlags, которая будет использоваться при получении данных.

cancellationToken
CancellationToken

Маркер отмены, который можно использовать для отмены асинхронной операции.

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

Асинхронная задача, которая завершается с количеством полученных байтов.

Исключения

Socket был закрыт.

Произошла ошибка при попытке доступа к сокету.

Маркер отмены был отменен. Это исключение сохраняется в возвращаемой задаче.

Применяется к