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


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
Исходный код:
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>

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

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

Задача, представляющая асинхронную операцию получения. Значение его Result свойства содержит общее число байтов, считываемых buffer между нулем (0) и числом запрошенных байтов. Значение результата равно нулю (0) только в том случае, если запрашивались ноль байтов или если больше байтов не доступно, так как сокет однорангового узла выполнил корректное завершение работы. Если запрашиваются ноль байтов, операции получения могут завершиться немедленно или не завершиться до тех пор, пока не будет доступен хотя бы один байт (но без использования данных).

Исключения

Он Socket был закрыт.

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

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

ReceiveAsync(IList<ArraySegment<Byte>>)

Исходный код:
Socket.Tasks.cs
Исходный код:
Socket.Tasks.cs
Исходный код:
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>>

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

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

Задача, представляющая асинхронную операцию получения. Значение его Result свойства содержит общее количество байтов, считываемых в буферы между нулем (0) и числом запрошенных байтов. Значение результата равно нулю (0) только в том случае, если запрашивались ноль байтов или если больше байтов не доступно, так как сокет однорангового узла выполнил корректное завершение работы. Если запрашиваются ноль байтов, операции получения могут завершиться немедленно или не завершиться до тех пор, пока не будет доступен хотя бы один байт (но без использования данных).

Исключения

Параметр buffers был null.

Он Socket был закрыт.

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

Комментарии

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

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

ReceiveAsync(SocketAsyncEventArgs)

Исходный код:
Socket.cs
Исходный код:
Socket.cs
Исходный код:
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 , используемый для этой асинхронной операции сокета.

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

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

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

Исключения

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

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

Он Socket был закрыт.

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

Комментарии

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

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

Свойство SocketAsyncEventArgs.SocketFlags параметра e предоставляет поставщику служб сокетов окон с дополнительными сведениями о запросе на чтение. Дополнительные сведения об использовании этого параметра см. в разделе 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
Исходный код:
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, которое будет использоваться при получении данных.

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

Задача, представляющая асинхронную операцию получения. Значение его Result свойства содержит общее число байтов, считываемых buffer между нулем (0) и числом запрошенных байтов. Значение результата равно нулю (0) только в том случае, если запрашивались ноль байтов или если больше байтов не доступно, так как сокет однорангового узла выполнил корректное завершение работы. Если запрашиваются ноль байтов, операции получения могут завершиться немедленно или не завершиться до тех пор, пока не будет доступен хотя бы один байт (но без использования данных).

Исключения

Он Socket был закрыт.

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

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

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

Исходный код:
Socket.Tasks.cs
Исходный код:
Socket.Tasks.cs
Исходный код:
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, которое будет использоваться при получении данных.

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

Задача, представляющая асинхронную операцию получения. Значение его Result свойства содержит общее число байтов, считываемых buffer между нулем (0) и числом запрошенных байтов. Значение результата равно нулю (0) только в том случае, если запрашивались ноль байтов или если больше байтов не доступно, так как сокет однорангового узла выполнил корректное завершение работы. Если запрашиваются ноль байтов, операции получения могут завершиться немедленно или не завершиться до тех пор, пока не будет доступен хотя бы один байт (но без использования данных).

Исключения

Параметр buffers был null.

Он Socket был закрыт.

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

Комментарии

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

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

ReceiveAsync(Memory<Byte>, CancellationToken)

Исходный код:
Socket.Tasks.cs
Исходный код:
Socket.Tasks.cs
Исходный код:
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

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

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

Объект, ValueTask<TResult> представляющий асинхронную операцию получения. Значение его Result свойства содержит общее число байтов, считываемых buffer между нулем (0) и числом запрошенных байтов. Значение результата равно нулю (0) только в том случае, если запрашивались ноль байтов или если больше байтов не доступно, так как сокет однорангового узла выполнил корректное завершение работы. Если запрашиваются ноль байтов, операции получения могут завершиться немедленно или не завершиться до тех пор, пока не будет доступен хотя бы один байт (но без использования данных).

Исключения

Он Socket был закрыт.

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

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

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

ReceiveAsync(Memory<Byte>, SocketFlags, CancellationToken)

Исходный код:
Socket.Tasks.cs
Исходный код:
Socket.Tasks.cs
Исходный код:
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

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

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

Объект, ValueTask<TResult> представляющий асинхронную операцию получения. Значение его Result свойства содержит общее число байтов, считываемых buffer между нулем (0) и числом запрошенных байтов. Значение результата равно нулю (0) только в том случае, если запрашивались ноль байтов или если больше байтов не доступно, так как сокет однорангового узла выполнил корректное завершение работы. Если запрашиваются ноль байтов, операции получения могут завершиться немедленно или не завершиться до тех пор, пока не будет доступен хотя бы один байт (но без использования данных).

Исключения

Он Socket был закрыт.

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

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

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