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


Socket.SendToAsync Метод

Определение

Перегрузки

SendToAsync(SocketAsyncEventArgs)

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

SendToAsync(ArraySegment<Byte>, EndPoint)

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

SendToAsync(ArraySegment<Byte>, SocketFlags, EndPoint)

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

SendToAsync(ReadOnlyMemory<Byte>, EndPoint, CancellationToken)

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

SendToAsync(ReadOnlyMemory<Byte>, SocketFlags, EndPoint, CancellationToken)

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

SendToAsync(ReadOnlyMemory<Byte>, SocketFlags, SocketAddress, CancellationToken)

Передает данные на указанную конечную точку, используя заданный объект SocketFlags.

SendToAsync(SocketAsyncEventArgs)

Исходный код:
Socket.cs
Исходный код:
Socket.cs
Исходный код:
Socket.cs

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

public:
 bool SendToAsync(System::Net::Sockets::SocketAsyncEventArgs ^ e);
public bool SendToAsync (System.Net.Sockets.SocketAsyncEventArgs e);
member this.SendToAsync : System.Net.Sockets.SocketAsyncEventArgs -> bool
Public Function SendToAsync (e As SocketAsyncEventArgs) As Boolean

Параметры

e
SocketAsyncEventArgs

Объект SocketAsyncEventArgs для использования в данной асинхронной операции сокета.

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

true, если операция ввода-вывода находится в состоянии ожидания. По завершении операции создается событие Completed в параметре e.

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

Исключения

Объект RemoteEndPoint не может иметь значение "null".

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

Socket был закрыт.

Указанный протокол работает с установлением соединения, но объект Socket еще не подключен.

Комментарии

Метод SendToAsync запускает асинхронную операцию отправки на удаленный узел, указанный SocketAsyncEventArgs.RemoteEndPoint в свойстве e параметра . SendToAsync Вызов метода позволяет отправлять данные в отдельном потоке выполнения. Хотя этот метод предназначен для протоколов без подключения, работает как с протоколами без подключения, SendToAsync так и с протоколами, ориентированными на подключение.

Чтобы получать уведомления о завершении, необходимо создать метод обратного вызова, который реализует делегат EventHandler<SocketAsyncEventArgs> и присоединить обратный вызов к событию SocketAsyncEventArgs.Completed .

Для успешного System.Net.Sockets.SocketAsyncEventArgs вызова этого метода требуются следующие свойства и события объекта :

Вызывающий объект может задать SocketAsyncEventArgs.UserToken для свойства любой объект пользовательского состояния, требуемый перед вызовом SendToAsync метода , чтобы данные можно было получить в методе обратного вызова. Если для обратного вызова требуется больше сведений, чем для одного объекта, можно создать небольшой класс для хранения других необходимых сведений о состоянии в качестве членов.

Если используется протокол, ориентированный на подключение, необходимо сначала вызвать Acceptметод , AcceptAsync, BeginAccept, BeginConnect, Connectили ConnectAsync . В противном случае SendToAsync вызовет исключение SocketException. При использовании протокола, ориентированного на подключение, SendToAsync метод игнорирует SocketAsyncEventArgs.RemoteEndPoint свойство и отправляет данные System.Net.EndPoint в объект , установленный Acceptв методе , AcceptAsyncBeginAccept, , BeginConnect, Connect, или ConnectAsync .

Если вы используете протокол без подключения, вам не нужно устанавливать удаленный узел по умолчанию с методом BeginConnect, Connectили ConnectAsync перед вызовом SendToAsyncметода . Это необходимо сделать только в том случае, если планируется вызвать методы BeginSend или SendAsync . Если вызвать BeginConnectметод , Connectили ConnectAsync до вызова SendToAsync, SocketAsyncEventArgs.RemoteEndPoint свойство переопределит указанный удаленный узел по умолчанию только для этой операции отправки. Также не требуется вызывать Bind метод . В этом случае базовый поставщик услуг назначит наиболее подходящий IP-адрес и номер порта локальной сети. Используйте нулевой номер порта, если вы хотите, чтобы базовый поставщик услуг выбирал бесплатный порт. Если необходимо определить ip-адрес и номер порта, назначенный локальной сети, можно использовать LocalEndPoint свойство после SocketAsyncEventArgs.Completed передачи сигнала о событии и вызова связанных делегатов.

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

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

Для сокетов, ориентированных на сообщения, необходимо соблюдать осторожность, чтобы не превышать максимальный размер сообщения базового транспорта. Если размер буфера превышает максимальный размер пакета базового поставщика службы, датаграмма не отправляется и SendToAsync вызывает исключение SocketException. Успешное завершение SendToAsync метода не означает, что данные были успешно доставлены.

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

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

SendToAsync(ArraySegment<Byte>, EndPoint)

Исходный код:
Socket.Tasks.cs
Исходный код:
Socket.Tasks.cs
Исходный код:
Socket.Tasks.cs

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

public:
 System::Threading::Tasks::Task<int> ^ SendToAsync(ArraySegment<System::Byte> buffer, System::Net::EndPoint ^ remoteEP);
public System.Threading.Tasks.Task<int> SendToAsync (ArraySegment<byte> buffer, System.Net.EndPoint remoteEP);
member this.SendToAsync : ArraySegment<byte> * System.Net.EndPoint -> System.Threading.Tasks.Task<int>
Public Function SendToAsync (buffer As ArraySegment(Of Byte), remoteEP As EndPoint) As Task(Of Integer)

Параметры

buffer
ArraySegment<Byte>

Буфер для отправляемого данных.

remoteEP
EndPoint

Удаленный узел, на который отправляются данные.

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

Асинхронная задача, которая завершается числом отправленных байтов.

Исключения

remoteEP имеет значение null.

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

Socket был закрыт.

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

SendToAsync(ArraySegment<Byte>, SocketFlags, EndPoint)

Исходный код:
Socket.Tasks.cs
Исходный код:
Socket.Tasks.cs
Исходный код:
Socket.Tasks.cs

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

public:
 System::Threading::Tasks::Task<int> ^ SendToAsync(ArraySegment<System::Byte> buffer, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ remoteEP);
public System.Threading.Tasks.Task<int> SendToAsync (ArraySegment<byte> buffer, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEP);
member this.SendToAsync : ArraySegment<byte> * System.Net.Sockets.SocketFlags * System.Net.EndPoint -> System.Threading.Tasks.Task<int>
Public Function SendToAsync (buffer As ArraySegment(Of Byte), socketFlags As SocketFlags, remoteEP As EndPoint) As Task(Of Integer)

Параметры

buffer
ArraySegment<Byte>

Буфер для отправляемого данных.

socketFlags
SocketFlags

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

remoteEP
EndPoint

Удаленный узел, на который отправляются данные.

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

Асинхронная задача, которая завершается числом отправленных байтов.

Исключения

remoteEP имеет значение null.

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

Socket был закрыт.

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

SendToAsync(ReadOnlyMemory<Byte>, EndPoint, CancellationToken)

Исходный код:
Socket.Tasks.cs
Исходный код:
Socket.Tasks.cs
Исходный код:
Socket.Tasks.cs

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

public System.Threading.Tasks.ValueTask<int> SendToAsync (ReadOnlyMemory<byte> buffer, System.Net.EndPoint remoteEP, System.Threading.CancellationToken cancellationToken = default);
member this.SendToAsync : ReadOnlyMemory<byte> * System.Net.EndPoint * System.Threading.CancellationToken -> System.Threading.Tasks.ValueTask<int>
Public Function SendToAsync (buffer As ReadOnlyMemory(Of Byte), remoteEP As EndPoint, Optional cancellationToken As CancellationToken = Nothing) As ValueTask(Of Integer)

Параметры

buffer
ReadOnlyMemory<Byte>

Буфер для отправляемого данных.

remoteEP
EndPoint

Удаленный узел, на который отправляются данные.

cancellationToken
CancellationToken

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

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

Асинхронная задача, которая завершается числом отправленных байтов.

Исключения

remoteEP имеет значение null.

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

Socket был закрыт.

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

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

SendToAsync(ReadOnlyMemory<Byte>, SocketFlags, EndPoint, CancellationToken)

Исходный код:
Socket.Tasks.cs
Исходный код:
Socket.Tasks.cs
Исходный код:
Socket.Tasks.cs

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

public System.Threading.Tasks.ValueTask<int> SendToAsync (ReadOnlyMemory<byte> buffer, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEP, System.Threading.CancellationToken cancellationToken = default);
member this.SendToAsync : ReadOnlyMemory<byte> * System.Net.Sockets.SocketFlags * System.Net.EndPoint * System.Threading.CancellationToken -> System.Threading.Tasks.ValueTask<int>
Public Function SendToAsync (buffer As ReadOnlyMemory(Of Byte), socketFlags As SocketFlags, remoteEP As EndPoint, Optional cancellationToken As CancellationToken = Nothing) As ValueTask(Of Integer)

Параметры

buffer
ReadOnlyMemory<Byte>

Буфер для отправляемого данных.

socketFlags
SocketFlags

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

remoteEP
EndPoint

Удаленный узел, на который отправляются данные.

cancellationToken
CancellationToken

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

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

Асинхронная задача, которая завершается числом отправленных байтов.

Исключения

remoteEP имеет значение null.

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

Socket был закрыт.

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

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

SendToAsync(ReadOnlyMemory<Byte>, SocketFlags, SocketAddress, CancellationToken)

Исходный код:
Socket.Tasks.cs
Исходный код:
Socket.Tasks.cs

Передает данные на указанную конечную точку, используя заданный объект SocketFlags.

public System.Threading.Tasks.ValueTask<int> SendToAsync (ReadOnlyMemory<byte> buffer, System.Net.Sockets.SocketFlags socketFlags, System.Net.SocketAddress socketAddress, System.Threading.CancellationToken cancellationToken = default);
member this.SendToAsync : ReadOnlyMemory<byte> * System.Net.Sockets.SocketFlags * System.Net.SocketAddress * System.Threading.CancellationToken -> System.Threading.Tasks.ValueTask<int>
Public Function SendToAsync (buffer As ReadOnlyMemory(Of Byte), socketFlags As SocketFlags, socketAddress As SocketAddress, Optional cancellationToken As CancellationToken = Nothing) As ValueTask(Of Integer)

Параметры

buffer
ReadOnlyMemory<Byte>

Буфер для отправляемого данных.

socketFlags
SocketFlags

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

socketAddress
SocketAddress

Объект SocketAddress, представляющий пункт назначения для данных.

cancellationToken
CancellationToken

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

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

Асинхронная задача, которая завершается числом отправленных байтов.

Исключения

socketAddress имеет значение null.

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

Socket был закрыт.

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

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