Socket.SendTo Метод

Определение

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

Перегрузки

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

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

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

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

SendTo(ReadOnlySpan<Byte>, SocketFlags, EndPoint)

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

SendTo(ReadOnlySpan<Byte>, EndPoint)

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

SendTo(Byte[], EndPoint)

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

SendTo(Byte[], SocketFlags, EndPoint)

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

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

Посылает указанное число байтов данных на указанную конечную точку, начиная с заданной позиции буфера и используя указанный объект 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, представляющий пункт назначения для данных.

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

Int32

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

Исключения

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 метода перед вызовом SendToremoteEP параметр переопределит указанный удаленный узел по умолчанию только для этой операции отправки. Вызов метода также не требуется Bind , так как базовый поставщик услуг назначит наиболее подходящий адрес локальной сети и номер порта. Если необходимо определить назначенный адрес локальной сети и номер порта, можно использовать LocalEndPoint свойство после успешного SendTo завершения метода.

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

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

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

Примечание

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

Примечание

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

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

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

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

Посылает указанное число байтов данных на указанную конечную точку, используя заданный объект 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, представляющий пункт назначения для данных.

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

Int32

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

Исключения

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. Если в качестве socketflags параметра указать DontRoute флаг, отправляемые данные не будут перенаправлены.

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

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

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

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

Примечание

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

Примечание

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

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

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

SendTo(ReadOnlySpan<Byte>, SocketFlags, EndPoint)

Передает данные на указанную конечную точку, используя заданный объект 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, представляющий пункт назначения для данных.

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

Int32

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

Исключения

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

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

Socket был закрыт.

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

SendTo(ReadOnlySpan<Byte>, EndPoint)

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

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, представляющий пункт назначения для данных.

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

Int32

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

Исключения

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

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

Socket был закрыт.

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

SendTo(Byte[], EndPoint)

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

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, представляющий пункт назначения для данных.

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

Int32

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

Исключения

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 метода перед вызовом SendToremoteEP параметр переопределит указанный удаленный узел по умолчанию только для этой операции отправки. Вызов метода также не требуется 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 sockets версии 2, чтобы получить подробное описание ошибки.

Примечание

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

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

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

SendTo(Byte[], SocketFlags, EndPoint)

Передает данные на указанную конечную точку, используя заданный объект 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, представляющий пункт назначения для данных.

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

Int32

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

Исключения

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. Если в качестве socketflags параметра указать DontRoute флаг, отправляемые данные не будут перенаправлены.

Если вы используете протокол без подключения, вам не нужно устанавливать удаленный узел по умолчанию с методом Connect перед вызовом SendTo. Это необходимо сделать только в том случае, если вы планируете Send вызвать метод. При вызове Connect метода перед вызовом SendToremoteEP параметр переопределит указанный удаленный узел по умолчанию только для этой операции отправки. Вызов метода также не требуется 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 sockets версии 2, чтобы получить подробное описание ошибки.

Примечание

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

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

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