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


Socket.BeginReceiveFrom Метод

Определение

Начинает асинхронно получать данные с указанного сетевого устройства.

public:
 IAsyncResult ^ BeginReceiveFrom(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ % remoteEP, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginReceiveFrom(byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP, AsyncCallback? callback, object? state);
public IAsyncResult BeginReceiveFrom(byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP, AsyncCallback callback, object state);
member this.BeginReceiveFrom : byte[] * int * int * System.Net.Sockets.SocketFlags * EndPoint * AsyncCallback * obj -> IAsyncResult
Public Function BeginReceiveFrom (buffer As Byte(), offset As Integer, size As Integer, socketFlags As SocketFlags, ByRef remoteEP As EndPoint, callback As AsyncCallback, state As Object) As IAsyncResult

Параметры

buffer
Byte[]

Массив типа Byte , который является расположением хранилища для полученных данных.

offset
Int32

Отсчитываемая от нуля позиция в параметре buffer , в котором хранятся данные.

size
Int32

Число получаемых байтов.

socketFlags
SocketFlags

Побитовое сочетание значений SocketFlags .

remoteEP
EndPoint

Ссылка на тот EndPoint же тип, что и конечная точка удаленного узла, обновляемая при синхронном получении.

callback
AsyncCallback

Делегат AsyncCallback .

state
Object

Объект, содержащий сведения о состоянии для этого запроса.

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

Объект, IAsyncResult ссылающийся на асинхронное чтение.

Исключения

buffer равно null.

–или–

remoteEP равно null.

Только платформа .NET Framework: произошла ошибка при попытке доступа к сокету.

offset меньше 0.

–или–

offset больше длины buffer.

–или–

size меньше 0.

–или–

size больше длины buffer минус значения offset параметра.

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

Вызывающий объект выше в стеке вызовов не имеет разрешения на запрошенную операцию.

Комментарии

Это важно

Это API совместимости. Мы не рекомендуем использовать методы APM (Begin* и End*) для новой разработки. Вместо этого используйте Taskэквиваленты на основе.

Вы можете передать обратный вызов, который реализуется AsyncCallbackBeginReceiveFrom для получения уведомлений о завершении операции. Обратите внимание, что если базовый сетевой стек завершает операцию синхронно, обратный вызов будет выполняться во время вызова BeginReceiveFrom. В этом случае CompletedSynchronously для возвращаемого IAsyncResult свойства будет задано true значение, указывающее, что метод завершился синхронно. AsyncState Используйте свойство IAsyncResult объекта состояния, переданного методуBeginReceiveFrom.

Асинхронная BeginReceiveFrom операция должна выполняться путем вызова EndReceiveFrom метода. Как правило, метод вызывается делегатом AsyncCallback . EndReceiveFrom блокирует вызывающий поток до завершения операции.

Этот метод считывает данные в buffer параметр и записывает конечную точку удаленного узла, из которой отправляются данные. Сведения о том, как получить эту конечную точку, см. в статье EndReceiveFrom. Этот метод наиболее полезен, если вы планируете асинхронно получать без подключения диаграммы данных от неизвестного узла или нескольких узлов. В этих случаях будет считываться первая заквеченная диаграмма данных, BeginReceiveFrom полученная в локальный сетевой буфер. Если полученная диаграмма данных превышает размер buffer, BeginReceiveFrom метод заполняется buffer максимальной частью сообщения и создает исключение SocketException. Если вы используете ненадежный протокол, лишние данные будут потеряны. Если вы используете надежный протокол, избыточные данные будут храниться поставщиком услуг, и его можно получить, вызвав BeginReceiveFrom метод с достаточно большим буфером.

Чтобы гарантировать, что конечная точка удаленного узла всегда возвращается, приложение должно явным образом привязать Socket его к локальной конечной точке с помощью Bind метода, а затем вызвать SetSocketOption метод с optionLevel набором IP параметров или IPv6 соответствующим образом, optionNamePacketInformationзадать параметр и optionValue параметр, чтобы включить этот параметр перед вызовом BeginReceiveFrom метода. В противном случае конечная точка удаленного узла не возвращается, когда отправитель отправил несколько диаграмм данных, прежде чем получатель вызвал BeginReceiveFrom метод.

Хотя BeginReceiveFrom он предназначен для протоколов без подключения, можно также использовать протокол, ориентированный на подключение. Если вы решили сделать это, сначала необходимо установить подключение удаленного узла, вызвав Connect / BeginConnect метод или примите входящий запрос на подключение, вызвав Accept метод или BeginAccept метод. При вызове BeginReceiveFrom метода перед установкой или принятием подключения вы получите SocketException. Вы также можете установить удаленный узел по умолчанию для протокола без подключения перед вызовом BeginReceiveFrom метода.

Параметр remoteEp

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

Чтобы отменить ожидающий BeginReceiveFrom, вызовите Close метод.

Замечание

При получении SocketExceptionсвойства используйте SocketException.ErrorCode свойство для получения определенного кода ошибки.

Замечание

Этот элемент выводит сведения о трассировке при включении трассировки сети в приложении. Дополнительные сведения см. в разделе "Трассировка сети" в .NET Framework.

Замечание

Контекст выполнения (контекст безопасности, олицетворенный пользователь и контекст вызова) кэшируется для асинхронных Socket методов. После первого использования определенного контекста (конкретный асинхронный Socket метод, Socket конкретный экземпляр и конкретный обратный вызов), последующие использование этого контекста увидит улучшение производительности.

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

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