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
Параметры
- offset
- Int32
Отсчитываемая с нуля позиция в параметре buffer
, с которой начинается отправка данных.
- size
- Int32
Количество байтов для отправки.
- socketFlags
- SocketFlags
Поразрядное сочетание значений SocketFlags.
- callback
- AsyncCallback
Делегат AsyncCallback.
- state
- Object
Объект, содержащий сведения о состоянии для этого запроса.
Возвращаемое значение
Объект IAsyncResult, который ссылается на асинхронную передачу.
Исключения
платформа .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 экземпляра и определенного обратного вызова) последующие использования этого контекста будут наблюдаться повышение производительности.