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


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 и .NET 5 и более ранних версий: при попытке доступа к сокету произошла ошибка.

Значение параметраoffset меньше 0.

-или-

Значение offset превышает длину buffer.

-или-

Значение параметраsize меньше 0.

-или-

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

Socket был закрыт.

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

Комментарии

Важно!

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

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

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

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

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

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

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

Примечание

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

Примечание

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети. Дополнительные сведения см. в статье Трассировка сети в платформа .NET Framework.

Примечание

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

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

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