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


Socket.SendTo Метод

Определение

Посылает данные на указанную конечную точку.

Перегрузки

SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)

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

SendTo(Byte[], Int32, SocketFlags, EndPoint)

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

SendTo(ReadOnlySpan<Byte>, SocketFlags, SocketAddress)

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

SendTo(ReadOnlySpan<Byte>, EndPoint)

Посылает данные на указанную конечную точку.

SendTo(Byte[], SocketFlags, EndPoint)

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

SendTo(Byte[], EndPoint)

Посылает данные на указанную конечную точку.

SendTo(ReadOnlySpan<Byte>, SocketFlags, EndPoint)

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

SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)

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

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

public:
 int SendTo(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ remoteEP);
public int SendTo (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEP);
member this.SendTo : byte[] * int * int * System.Net.Sockets.SocketFlags * System.Net.EndPoint -> int
Public Function SendTo (buffer As Byte(), offset As Integer, size As Integer, socketFlags As SocketFlags, remoteEP As EndPoint) As Integer

Параметры

buffer
Byte[]

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

offset
Int32

Положение в буфере данных, с которого начинается отправка данных.

size
Int32

Количество байтов для отправки.

socketFlags
SocketFlags

Поразрядное сочетание значений SocketFlags.

remoteEP
EndPoint

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

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

Число отправленных байтов.

Исключения

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

-или-

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

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

-или-

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

-или-

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

-или-

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

socketFlags — недопустимое сочетание значений.

-или-

Произошла ошибка операционной системы при доступе к Socket.

Socket был закрыт.

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

Примеры

В следующем примере кода на указанный удаленный узел отправляется датаграмма без подключения. Смещение, размер и SocketFlags передаются методу SendTo .

static void SendTo4()
{
   IPHostEntry^ hostEntry = Dns::Resolve( Dns::GetHostName() );
   IPEndPoint^ endPoint = gcnew IPEndPoint( hostEntry->AddressList[ 0 ],11000 );

   Socket^ s = gcnew Socket( endPoint->Address->AddressFamily,
      SocketType::Dgram,
      ProtocolType::Udp );

   array<Byte>^ msg = Encoding::ASCII->GetBytes( "This is a test" );
   Console::WriteLine( "Sending data." );
   // This call blocks. 
   s->SendTo( msg, 0, msg->Length, SocketFlags::None, endPoint );
   s->Close();
}
public static void SendTo4()
{
    IPHostEntry hostEntry = Dns.GetHostEntry(Dns.GetHostName());
    IPEndPoint endPoint = new IPEndPoint(hostEntry.AddressList[0], 11000);

    Socket s = new Socket(endPoint.Address.AddressFamily,
        SocketType.Dgram,
        ProtocolType.Udp);

    byte[] msg = Encoding.ASCII.GetBytes("This is a test");
    Console.WriteLine("Sending data.");
    // This call blocks.
    s.SendTo(msg, 0, msg.Length, SocketFlags.None, endPoint);
    s.Close();
}
Public Shared Sub SendTo4() 
    Dim hostEntry As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName())
    Dim endPoint As New IPEndPoint(hostEntry.AddressList(0), 11000)
    
    Dim s As New Socket(endPoint.Address.AddressFamily, SocketType.Dgram, ProtocolType.Udp)
    
    Dim msg As Byte() = Encoding.ASCII.GetBytes("This is a test")
    Console.WriteLine("Sending data.")
    ' This call blocks. 
    s.SendTo(msg, 0, msg.Length, SocketFlags.None, endPoint)
    s.Close()

End Sub

Комментарии

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

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

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

Блокирующие сокеты будут блокироваться до тех пор, пока не будет отправлено запрошенное количество байтов. Так как неблокирующая Socket операция завершается немедленно, она может не отправлять все запрошенные байты в рамках одной операции. Ваши приложения обязаны отслеживать количество отправленных байтов и повторять операцию до тех пор, пока приложение не отправит запрошенное количество байтов. Кроме того, нет никакой гарантии, что отправляемые данные сразу же появятся в сети. Чтобы повысить эффективность сети, базовая система может отложить передачу до тех пор, пока не будет собран значительный объем данных. Успешное выполнение SendTo метода означает, что в базовой системе есть место для буферизации данных для отправки по сети.

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

Примечание

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

Примечание

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

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

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

SendTo(Byte[], Int32, SocketFlags, EndPoint)

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

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

public:
 int SendTo(cli::array <System::Byte> ^ buffer, int size, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ remoteEP);
public int SendTo (byte[] buffer, int size, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEP);
member this.SendTo : byte[] * int * System.Net.Sockets.SocketFlags * System.Net.EndPoint -> int
Public Function SendTo (buffer As Byte(), size As Integer, socketFlags As SocketFlags, remoteEP As EndPoint) As Integer

Параметры

buffer
Byte[]

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

size
Int32

Количество байтов для отправки.

socketFlags
SocketFlags

Поразрядное сочетание значений SocketFlags.

remoteEP
EndPoint

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

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

Число отправленных байтов.

Исключения

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

-или-

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

Заданное значение size превышает размер параметра buffer.

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

Socket был закрыт.

Примеры

В следующем примере кода на указанный удаленный узел отправляется датаграмма без подключения. Размер и SocketFlags передаются в SendTo метод .

static void SendTo3()
{
   IPHostEntry^ hostEntry = Dns::Resolve( Dns::GetHostName() );
   IPEndPoint^ endPoint = gcnew IPEndPoint( hostEntry->AddressList[ 0 ],11000 );

   Socket^ s = gcnew Socket( endPoint->Address->AddressFamily,
      SocketType::Dgram,
      ProtocolType::Udp );

   array<Byte>^ msg = Encoding::ASCII->GetBytes( "This is a test" );
   Console::WriteLine( "Sending data." );
   // This call blocks. 
   s->SendTo( msg, msg->Length, SocketFlags::None, endPoint );
   s->Close();
}
public static void SendTo3()
{
    IPHostEntry hostEntry = Dns.GetHostEntry(Dns.GetHostName());
    IPEndPoint endPoint = new IPEndPoint(hostEntry.AddressList[0], 11000);

    Socket s = new Socket(endPoint.Address.AddressFamily,
        SocketType.Dgram,
        ProtocolType.Udp);

    byte[] msg = Encoding.ASCII.GetBytes("This is a test");
    Console.WriteLine("Sending data.");
    // This call blocks.
    s.SendTo(msg, msg.Length, SocketFlags.None, endPoint);
    s.Close();
}
Public Shared Sub SendTo3() 
    Dim hostEntry As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName())
    Dim endPoint As New IPEndPoint(hostEntry.AddressList(0), 11000)
    
    Dim s As New Socket(endPoint.Address.AddressFamily, SocketType.Dgram, ProtocolType.Udp)
    
    Dim msg As Byte() = Encoding.ASCII.GetBytes("This is a test")
    Console.WriteLine("Sending data.")
    ' This call blocks. 
    s.SendTo(msg, msg.Length, SocketFlags.None, endPoint)
    s.Close()

End Sub

Комментарии

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

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

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

Блокирующие сокеты будут блокироваться до тех пор, пока не будет отправлено запрошенное количество байтов. Так как неблокирование Socket завершается немедленно, оно может не отправить все байты, запрошенные в одной операции. Ваше приложение отвечает за отслеживание количества отправленных байтов и повторение операции до тех пор, пока приложение не отправит запрошенное количество байтов. Кроме того, нет никакой гарантии, что отправляемые данные сразу же появятся в сети. Чтобы повысить эффективность сети, базовая система может отложить передачу до тех пор, пока не будет собран значительный объем данных. Успешное выполнение SendTo метода означает, что в базовой системе есть место для буферизации данных для отправки по сети.

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

Примечание

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

Примечание

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

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

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

SendTo(ReadOnlySpan<Byte>, SocketFlags, SocketAddress)

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

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

public:
 int SendTo(ReadOnlySpan<System::Byte> buffer, System::Net::Sockets::SocketFlags socketFlags, System::Net::SocketAddress ^ socketAddress);
public int SendTo (ReadOnlySpan<byte> buffer, System.Net.Sockets.SocketFlags socketFlags, System.Net.SocketAddress socketAddress);
member this.SendTo : ReadOnlySpan<byte> * System.Net.Sockets.SocketFlags * System.Net.SocketAddress -> int
Public Function SendTo (buffer As ReadOnlySpan(Of Byte), socketFlags As SocketFlags, socketAddress As SocketAddress) As Integer

Параметры

buffer
ReadOnlySpan<Byte>

Диапазон байтов, содержащий отправляемые данные.

socketFlags
SocketFlags

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

socketAddress
SocketAddress

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

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

Число отправленных байтов.

Исключения

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

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

Socket был закрыт.

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

SendTo(ReadOnlySpan<Byte>, EndPoint)

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

Посылает данные на указанную конечную точку.

public:
 int SendTo(ReadOnlySpan<System::Byte> buffer, System::Net::EndPoint ^ remoteEP);
public int SendTo (ReadOnlySpan<byte> buffer, System.Net.EndPoint remoteEP);
member this.SendTo : ReadOnlySpan<byte> * System.Net.EndPoint -> int
Public Function SendTo (buffer As ReadOnlySpan(Of Byte), remoteEP As EndPoint) As Integer

Параметры

buffer
ReadOnlySpan<Byte>

Диапазон байтов, содержащий отправляемые данные.

remoteEP
EndPoint

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

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

Число отправленных байтов.

Исключения

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

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

Socket был закрыт.

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

SendTo(Byte[], SocketFlags, EndPoint)

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

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

public:
 int SendTo(cli::array <System::Byte> ^ buffer, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ remoteEP);
public int SendTo (byte[] buffer, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEP);
member this.SendTo : byte[] * System.Net.Sockets.SocketFlags * System.Net.EndPoint -> int
Public Function SendTo (buffer As Byte(), socketFlags As SocketFlags, remoteEP As EndPoint) As Integer

Параметры

buffer
Byte[]

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

socketFlags
SocketFlags

Поразрядное сочетание значений SocketFlags.

remoteEP
EndPoint

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

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

Число отправленных байтов.

Исключения

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

-или-

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

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

Socket был закрыт.

Примеры

В следующем примере кода на указанный удаленный узел отправляется датаграмма без подключения. SocketFlags передаются в SendTo метод .

static void SendTo2()
{
   IPHostEntry^ hostEntry = Dns::Resolve( Dns::GetHostName() );
   IPEndPoint^ endPoint = gcnew IPEndPoint( hostEntry->AddressList[ 0 ],11000 );

   Socket^ s = gcnew Socket( endPoint->Address->AddressFamily,
      SocketType::Dgram,
      ProtocolType::Udp );

   array<Byte>^ msg = Encoding::ASCII->GetBytes( "This is a test" );
   Console::WriteLine( "Sending data." );
   // This call blocks. 
   s->SendTo( msg, SocketFlags::None, endPoint );
   s->Close();
}
public static void SendTo2()
{
    IPHostEntry hostEntry = Dns.GetHostEntry(Dns.GetHostName());
    IPEndPoint endPoint = new IPEndPoint(hostEntry.AddressList[0], 11000);

    Socket s = new Socket(endPoint.Address.AddressFamily,
        SocketType.Dgram,
        ProtocolType.Udp);

    byte[] msg = Encoding.ASCII.GetBytes("This is a test");
    Console.WriteLine("Sending data.");
    // This call blocks.
    s.SendTo(msg, SocketFlags.None, endPoint);
    s.Close();
}
Public Shared Sub SendTo2() 
    Dim hostEntry As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName())
    Dim endPoint As New IPEndPoint(hostEntry.AddressList(0), 11000)
    
    Dim s As New Socket(endPoint.Address.AddressFamily, SocketType.Dgram, ProtocolType.Udp)
    
    Dim msg As Byte() = Encoding.ASCII.GetBytes("This is a test")
    Console.WriteLine("Sending data.")
    ' This call blocks. 
    s.SendTo(msg, SocketFlags.None, endPoint)
    s.Close()

End Sub

Комментарии

В этой перегрузке смещение буфера по умолчанию равны 0, а количество байтов для отправки по умолчанию — к размеру buffer. Если указать DontRoute флаг в socketflags качестве параметра, отправляемые данные не будут перенаправлены.

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

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

Блокирующие сокеты будут блокироваться до тех пор, пока не будут отправлены все запрошенные байты в buffer . Так как неблокирование Socket завершается немедленно, оно может не отправлять все байты в buffer. Ваше приложение отвечает за отслеживание количества отправленных байтов и повторение операции до тех пор, пока приложение не отправит все байты в buffer. Кроме того, нет никакой гарантии, что отправляемые данные сразу же появятся в сети. Чтобы повысить эффективность сети, базовая система может отложить передачу до тех пор, пока не будет собран значительный объем данных. Успешное выполнение SendTo метода означает, что в базовой системе есть место для буферизации данных для отправки по сети.

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

Примечание

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

Примечание

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

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

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

SendTo(Byte[], EndPoint)

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

Посылает данные на указанную конечную точку.

public:
 int SendTo(cli::array <System::Byte> ^ buffer, System::Net::EndPoint ^ remoteEP);
public int SendTo (byte[] buffer, System.Net.EndPoint remoteEP);
member this.SendTo : byte[] * System.Net.EndPoint -> int
Public Function SendTo (buffer As Byte(), remoteEP As EndPoint) As Integer

Параметры

buffer
Byte[]

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

remoteEP
EndPoint

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

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

Число отправленных байтов.

Исключения

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

-или-

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

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

Socket был закрыт.

Примеры

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

static void SendTo1()
{
   IPHostEntry^ hostEntry = Dns::Resolve( Dns::GetHostName() );
   IPEndPoint^ endPoint = gcnew IPEndPoint( hostEntry->AddressList[ 0 ],11000 );

   Socket^ s = gcnew Socket( endPoint->Address->AddressFamily,
      SocketType::Dgram,
      ProtocolType::Udp );

   array<Byte>^ msg = Encoding::ASCII->GetBytes( "This is a test" );
   Console::WriteLine( "Sending data." );
   // This call blocks. 
   s->SendTo( msg, endPoint );
   s->Close();
}
public static void SendTo1()
{
    IPHostEntry hostEntry = Dns.GetHostEntry(Dns.GetHostName());
    IPEndPoint endPoint = new IPEndPoint(hostEntry.AddressList[0], 11000);

    Socket s = new Socket(endPoint.Address.AddressFamily,
        SocketType.Dgram,
        ProtocolType.Udp);

    byte[] msg = Encoding.ASCII.GetBytes("This is a test");
    Console.WriteLine("Sending data.");
    // This call blocks.
    s.SendTo(msg, endPoint);
    s.Close();
}
Public Shared Sub SendTo1() 
    Dim hostEntry As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName())
    Dim endPoint As New IPEndPoint(hostEntry.AddressList(0), 11000)
    
    Dim s As New Socket(endPoint.Address.AddressFamily, SocketType.Dgram, ProtocolType.Udp)
    
    Dim msg As Byte() = Encoding.ASCII.GetBytes("This is a test")
    Console.WriteLine("Sending data.")
    ' This call blocks. 
    s.SendTo(msg, endPoint)
    s.Close()

End Sub

Комментарии

В этой перегрузке смещение буфера по умолчанию равно 0, количество отправляемых байтов по умолчанию равно размеру buffer параметра, а SocketFlags значение по умолчанию равно 0.

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

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

Блокирующие сокеты будут блокироваться до тех пор, пока не будут отправлены все байты в буфере. Так как неблокирование Socket завершается немедленно, оно может не отправлять все байты в buffer. Ваше приложение отвечает за отслеживание количества отправленных байтов и повторение операции до тех пор, пока приложение не отправит все байты в buffer. Кроме того, нет никакой гарантии, что отправляемые данные сразу же появятся в сети. Чтобы повысить эффективность сети, базовая система может отложить передачу до сбора значительного объема исходящих данных. Успешное выполнение SendTo метода означает, что в базовой системе есть место для буферизации данных для отправки по сети.

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

Примечание

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

Примечание

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

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

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

SendTo(ReadOnlySpan<Byte>, SocketFlags, EndPoint)

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

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

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

Параметры

buffer
ReadOnlySpan<Byte>

Диапазон байтов, содержащий отправляемые данные.

socketFlags
SocketFlags

Поразрядное сочетание значений SocketFlags.

remoteEP
EndPoint

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

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

Число отправленных байтов.

Исключения

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

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

Socket был закрыт.

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