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


Socket.BeginSendTo Метод

Определение

Отправляет данные асинхронно на конкретный удаленный узел.

public:
 IAsyncResult ^ BeginSendTo(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 BeginSendTo(byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEP, AsyncCallback? callback, object? state);
public IAsyncResult BeginSendTo(byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEP, AsyncCallback callback, object state);
member this.BeginSendTo : byte[] * int * int * System.Net.Sockets.SocketFlags * System.Net.EndPoint * AsyncCallback * obj -> IAsyncResult
Public Function BeginSendTo (buffer As Byte(), offset As Integer, size As Integer, socketFlags As SocketFlags, 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эквиваленты на основе.

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

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

Если вы используете протокол, ориентированный на подключение, необходимо сначала вызвать Connectметод , BeginConnectAcceptили BeginAccept метод или BeginSendTo вызвать SocketException. BeginSendToбудет игнорировать remoteEP параметр и отправлять данные в установленный EndPointConnectBeginConnectAcceptв , или BeginAccept метод.

Если вы используете протокол без подключения, вам не нужно устанавливать удаленный узел по умолчанию с Connect помощью метода или BeginConnect метода перед вызовом SendTo. Это необходимо сделать только в том случае, если вы планируете вызвать BeginSend метод. При вызове Connect метода или BeginConnect метода перед вызовом SendToremoteEP параметр переопределит указанный удаленный узел по умолчанию только для этой операции отправки. Для вызова Bind метода также не требуется. В этом случае базовый поставщик услуг назначит наиболее подходящий адрес локальной сети и номер порта. Используйте номер порта в нуле, если требуется, чтобы базовый поставщик услуг использовал бесплатный порт. Если необходимо определить назначенный адрес локальной сети и номер порта, можно использовать LocalEndPoint свойство после успешного EndSendTo завершения метода.

Если вы хотите отправить данные на широковещательный адрес, необходимо сначала вызвать SetSocketOption метод и задать для него параметр SocketOptionName.Broadcastсокета. -Необходимо также убедиться, что размер буфера не превышает максимальный размер пакета базового поставщика услуг. Если это так, то диаграмма данных не будет отправлена EndSendToи SocketException вызовет исключение.

Если в качестве DontRoute параметра указать socketflags флаг, то отправляемые данные не будут перенаправлены.

Замечание

При получении SocketExceptionсвойства используйте SocketException.ErrorCode свойство для получения определенного кода ошибки. Получив этот код, ознакомьтесь с документацией по коду ошибки API сокетов Windows версии 2 , чтобы получить подробное описание ошибки.

Замечание

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

Замечание

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

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

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