Socket.SendTo Method

Definition

Посылает данные на указанную конечную точку.Sends data to a specific endpoint.

Overloads

SendTo(Byte[], EndPoint)

Посылает данные на указанную конечную точку.Sends data to the specified endpoint.

SendTo(Byte[], SocketFlags, EndPoint)

Передает данные на указанную конечную точку, используя заданный объект SocketFlags.Sends data to a specific endpoint using the specified SocketFlags.

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

Посылает указанное число байтов данных на указанную конечную точку, используя заданный объект SocketFlags.Sends the specified number of bytes of data to the specified endpoint using the specified SocketFlags.

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

Посылает указанное число байтов данных на указанную конечную точку, начиная с заданной позиции буфера и используя указанный объект SocketFlags.Sends the specified number of bytes of data to the specified endpoint, starting at the specified location in the buffer, and using the specified SocketFlags.

SendTo(Byte[], EndPoint)

Посылает данные на указанную конечную точку.Sends data to the specified 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

Parameters

buffer
Byte[]

Массив типа Byte, содержащий данные для отправки.An array of type Byte that contains the data to be sent.

remoteEP
EndPoint

Объект EndPoint, представляющий пункт назначения для данных.The EndPoint that represents the destination for the data.

Returns

Int32

Число отправленных байтов.The number of bytes sent.

Exceptions

Параметр buffer равен null.buffer is null.

-или--or- Параметр remoteEP равен null.remoteEP is null.

Произошла ошибка при попытке доступа к сокету.An error occurred when attempting to access the socket.

Socket был закрыт.The Socket has been closed.

Examples

В следующем примере кода датаграмма без подключения отправляется на указанный удаленный узел.The following code example sends a connectionless datagram to the specified remote host.

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

Remarks

В этой перегрузке смещение буфера по умолчанию равно 0, число отправляемых байтов по умолчанию равно размеру параметра buffer, а SocketFlags значение по умолчанию равно 0.In this overload, the buffer offset defaults to 0, the number of bytes to send defaults to the size of the buffer parameter, and the SocketFlags value defaults to 0.

Если используется протокол без подключения, то перед вызовом SendToне нужно устанавливать удаленный узел по умолчанию с помощью метода Connect.If you are using a connectionless protocol, you do not need to establish a default remote host with the Connect method prior to calling SendTo. Это необходимо сделать только в том случае, если предполагается вызывать метод Send.You only need to do this if you intend to call the Send method. При вызове метода Connect до вызова SendToпараметр remoteEP переопределит указанный удаленный узел по умолчанию только для этой операции отправки.If you do call the Connect method prior to calling SendTo, the remoteEP parameter will override the specified default remote host for that send operation only. Также не требуется вызывать метод Bind, так как базовый поставщик услуг будет назначать наиболее подходящий адрес локальной сети и номер порта.You are also not required to call the Bind method, because the underlying service provider will assign the most appropriate local network address and port number. Если необходимо указать назначенный локальный сетевой адрес и номер порта, можно использовать свойство LocalEndPoint после успешного завершения метода SendTo.If you need to identify the assigned local network address and port number, you can use the LocalEndPoint property after the SendTo method successfully completes.

Несмотря на то, что предназначен для протоколов без подключения, SendTo также работает с протоколами, ориентированными на подключения.Although intended for connectionless protocols, SendTo also works with connection-oriented protocols. Если используется протокол, ориентированный на соединение, необходимо сначала установить соединение с удаленным узлом, вызвав метод Connect или приняв входящий запрос на соединение с помощью метода Accept.If you are using a connection-oriented protocol, you must first establish a remote host connection by calling the Connect method or accept an incoming connection request using the Accept method. Если не установить или принять подключение к удаленному узлу, SendTo выдаст SocketException.If you do not establish or accept a remote host connection, SendTo will throw a SocketException. Кроме того, можно установить удаленный узел по умолчанию для протокола без установления соединения перед вызовом метода SendTo.You can also establish a default remote host for a connectionless protocol prior to calling the SendTo method. В любом из этих случаев SendTo пропустит параметр remoteEP и отправит данные только подключенному или удаленному узлу по умолчанию.In either of these cases, SendTo will ignore the remoteEP parameter and only send data to the connected or default remote host.

Блокирующие сокеты блокируются до тех пор, пока не будут отправлены все байты в буфере.Blocking sockets will block until the all of the bytes in the buffer are sent. Поскольку незаблокированный Socket завершается немедленно, он может не отправить все байты в buffer.Since a nonblocking Socket completes immediately, it might not send all of the bytes in the buffer. Вы обязаны следить за количеством отправленных байтов и повторять операцию до тех пор, пока приложение не отправит все байты в buffer.It is your application's responsibility to keep track of the number of bytes sent and to retry the operation until the application sends all of the bytes in the buffer. Кроме того, не гарантируется, что отправляемые данные будут немедленно отображаться в сети.There is also no guarantee that the data you send will appear on the network immediately. Чтобы повысить эффективность работы сети, базовая система может отложить передачу данных до тех пор, пока не будет собрано значительное количество исходящих.To increase network efficiency, the underlying system may delay transmission until a significant amount of outgoing data is collected. Успешное завершение метода SendTo означает, что базовая система имела место для буферизации данных для отправки в сеть.A successful completion of the SendTo method means that the underlying system has had room to buffer your data for a network send.

Если в блокирующем режиме используется протокол без подключения, SendTo будет блокироваться до отправки датаграммы.If you are using a connectionless protocol in blocking mode, SendTo will block until the datagram is sent. Если вы хотите отправить данные на широковещательный адрес, сначала необходимо вызвать метод SetSocketOption и установить параметр сокета в значение SocketOptionName.Broadcast.If you want to send data to a broadcast address, you must first call the SetSocketOption method and set the socket option to SocketOptionName.Broadcast. Кроме того, необходимо убедиться, что число отправленных байтов не превышает максимальный размер пакета для базового поставщика услуг.You must also be sure that the number of bytes sent does not exceed the maximum packet size of the underlying service provider. Если это так, датаграмма не будет отправлена, а SendTo выдаст SocketException.If it does, the datagram will not be sent and SendTo will throw a SocketException.

Note

Если вы получаете SocketException, используйте свойство SocketException.ErrorCode для получения конкретного кода ошибки.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. После получения этого кода обратитесь к документации по коду ошибки API Windows Sockets версии 2 для получения подробного описания ошибки.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Note

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети.This member outputs trace information when you enable network tracing in your application. Дополнительные сведения см. в разделе Сетевая трассировка в .NET Framework.For more information, see Network Tracing in the .NET Framework.

See also

SendTo(Byte[], SocketFlags, EndPoint)

Передает данные на указанную конечную точку, используя заданный объект SocketFlags.Sends data to a specific endpoint using the specified 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

Parameters

buffer
Byte[]

Массив типа Byte, содержащий данные для отправки.An array of type Byte that contains the data to be sent.

socketFlags
SocketFlags

Побитовое сочетание значений SocketFlags.A bitwise combination of the SocketFlags values.

remoteEP
EndPoint

Объект EndPoint, представляющий пункт назначения для данных.The EndPoint that represents the destination location for the data.

Returns

Int32

Число отправленных байтов.The number of bytes sent.

Exceptions

Параметр buffer равен null.buffer is null.

-или--or- Параметр remoteEP равен null.remoteEP is null.

Произошла ошибка при попытке доступа к сокету.An error occurred when attempting to access the socket.

Socket был закрыт.The Socket has been closed.

Examples

В следующем примере кода датаграмма без подключения отправляется на указанный удаленный узел.The following code example sends a connectionless datagram to the specified remote host. SocketFlags передаются методу SendTo.SocketFlags are passed to the SendTo method.

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

Remarks

В этой перегрузке смещение буфера по умолчанию равно 0, а число байтов для отправки по умолчанию равно размеру buffer.In this overload, the buffer offset defaults to 0, and the number of bytes to send defaults to the size of the buffer. Если в качестве параметра socketflags указан флаг DontRoute, отправляемые данные не будут маршрутизироваться.If you specify the DontRoute flag as the socketflags parameter, the data you are sending will not be routed.

Если используется протокол без подключения, то перед вызовом SendToне нужно устанавливать удаленный узел по умолчанию с помощью метода Connect.If you are using a connectionless protocol, you do not need to establish a default remote host with the Connect method prior to calling SendTo. Это необходимо сделать только в том случае, если предполагается вызывать метод Send.You only need to do this if you intend to call the Send method. При вызове метода Connect до вызова SendToпараметр remoteEP переопределит указанный удаленный узел по умолчанию только для этой операции отправки.If you do call the Connect method prior to calling SendTo, the remoteEP parameter will override the specified default remote host for that send operation only. Также не требуется вызывать метод Bind, так как базовый поставщик услуг будет назначать наиболее подходящий адрес локальной сети и номер порта.You are also not required to call the Bind method, because the underlying service provider will assign the most appropriate local network address and port number. Если необходимо указать назначенный локальный сетевой адрес и номер порта, можно использовать свойство LocalEndPoint после успешного завершения метода SendTo.If you need to identify the assigned local network address and port number, you can use the LocalEndPoint property after the SendTo method successfully completes.

Несмотря на то, что предназначен для протоколов без подключения, SendTo также работает с протоколами, ориентированными на подключения.Although intended for connectionless protocols, SendTo also works with connection-oriented protocols. Если используется протокол, ориентированный на соединение, необходимо сначала установить соединение с удаленным узлом, вызвав метод Connect или приняв входящий запрос на соединение с помощью метода Accept.If you are using a connection-oriented protocol, you must first establish a remote host connection by calling the Connect method or accept an incoming connection request using the Accept method. Если не установить или принять подключение к удаленному узлу, SendTo выдаст SocketException.If you do not establish or accept a remote host connection, SendTo will throw a SocketException. Кроме того, можно установить удаленный узел по умолчанию для протокола без установления соединения перед вызовом метода SendTo.You can also establish a default remote host for a connectionless protocol prior to calling the SendTo method. В любом из этих случаев SendTo пропустит параметр remoteEP и отправит данные только подключенному или удаленному узлу по умолчанию.In either of these cases, SendTo will ignore the remoteEP parameter and only send data to the connected or default remote host.

Блокирующие сокеты блокируются до тех пор, пока не будут отправлены все байты в buffer.Blocking sockets will block until the requested all of the bytes in the buffer are sent. Поскольку незаблокированный Socket завершается немедленно, он может не отправить все байты в buffer.Since a nonblocking Socket completes immediately, it might not send all of the bytes in the buffer. Вы обязаны следить за количеством отправленных байтов и повторять операцию до тех пор, пока приложение не отправит все байты в buffer.It is your application's responsibility to keep track of the number of bytes sent and to retry the operation until the application sends all of the bytes in the buffer. Кроме того, не гарантируется, что отправляемые данные будут немедленно отображаться в сети.There is also no guarantee that the data you send will appear on the network immediately. Чтобы повысить эффективность работы сети, базовая система может отложить передачу данных до тех пор, пока не будет собрано значительное количество исходящих.To increase network efficiency, the underlying system may delay transmission until a significant amount of out-going data is collected. Успешное завершение метода SendTo означает, что базовая система имела место для буферизации данных для отправки в сеть.A successful completion of the SendTo method means that the underlying system has had room to buffer your data for a network send.

Если в блокирующем режиме используется протокол без подключения, SendTo будет блокироваться до отправки датаграммы.If you are using a connectionless protocol in blocking mode, SendTo will block until the datagram is sent. Если вы хотите отправить данные на широковещательный адрес, сначала необходимо вызвать метод SetSocketOption и установить параметр сокета в значение SocketOptionName.Broadcast.If you want to send data to a broadcast address, you must first call the SetSocketOption method and set the socket option to SocketOptionName.Broadcast. Кроме того, необходимо убедиться, что число отправленных байтов не превышает максимальный размер пакета для базового поставщика услуг.You must also be sure that the number of bytes sent does not exceed the maximum packet size of the underlying service provider. Если это так, датаграмма не будет отправлена, а SendTo выдаст SocketException.If it does, the datagram will not be sent and SendTo will throw a SocketException.

Note

Если вы получаете SocketException, используйте свойство SocketException.ErrorCode для получения конкретного кода ошибки.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. После получения этого кода обратитесь к документации по коду ошибки API Windows Sockets версии 2 для получения подробного описания ошибки.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Note

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети.This member outputs trace information when you enable network tracing in your application. Дополнительные сведения см. в разделе Сетевая трассировка в .NET Framework.For more information, see Network Tracing in the .NET Framework.

See also

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

Посылает указанное число байтов данных на указанную конечную точку, используя заданный объект SocketFlags.Sends the specified number of bytes of data to the specified endpoint using the specified 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

Parameters

buffer
Byte[]

Массив типа Byte, содержащий данные для отправки.An array of type Byte that contains the data to be sent.

size
Int32

Число отправляемых байтов.The number of bytes to send.

socketFlags
SocketFlags

Побитовое сочетание значений SocketFlags.A bitwise combination of the SocketFlags values.

remoteEP
EndPoint

Объект EndPoint, представляющий пункт назначения для данных.The EndPoint that represents the destination location for the data.

Returns

Int32

Число отправленных байтов.The number of bytes sent.

Exceptions

Параметр buffer равен null.buffer is null.

-или--or- Параметр remoteEP равен null.remoteEP is null.

Заданное значение size превышает размер параметра buffer.The specified size exceeds the size of buffer.

Произошла ошибка при попытке доступа к сокету.An error occurred when attempting to access the socket.

Socket был закрыт.The Socket has been closed.

Examples

В следующем примере кода датаграмма без подключения отправляется на указанный удаленный узел.The following code example sends a connectionless datagram to the specified remote host. Размер и SocketFlags передаются методу SendTo.The size and SocketFlags are passed to the SendTo method.

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

Remarks

В этой перегрузке смещение буфера по умолчанию равно 0.In this overload, the buffer offset defaults to 0. Если в качестве параметра socketflags указан флаг DontRoute, отправляемые данные не будут маршрутизироваться.If you specify the DontRoute flag as the socketflags parameter, the data you are sending will not be routed.

Если используется протокол без подключения, то перед вызовом SendToне нужно устанавливать удаленный узел по умолчанию с помощью метода Connect.If you are using a connectionless protocol, you do not need to establish a default remote host with the Connect method prior to calling SendTo. Это необходимо сделать только в том случае, если предполагается вызывать метод Send.You only need to do this if you intend to call the Send method. При вызове метода Connect до вызова SendToпараметр remoteEP переопределит указанный удаленный узел по умолчанию только для этой операции отправки.If you do call the Connect method prior to calling SendTo, the remoteEP parameter will override the specified default remote host for that send operation only. Также не требуется вызывать метод Bind, так как базовый поставщик услуг будет назначать наиболее подходящий адрес локальной сети и номер порта.You are also not required to call the Bind method, because the underlying service provider will assign the most appropriate local network address and port number. Если необходимо указать назначенный локальный сетевой адрес и номер порта, можно использовать свойство LocalEndPoint после успешного завершения метода SendTo.If you need to identify the assigned local network address and port number, you can use the LocalEndPoint property after the SendTo method successfully completes.

Несмотря на то, что предназначен для протоколов без подключения, SendTo также работает с протоколами, ориентированными на подключения.Although intended for connectionless protocols, SendTo also works with connection-oriented protocols. Если используется протокол, ориентированный на соединение, необходимо сначала установить соединение с удаленным узлом, вызвав метод Connect или приняв входящий запрос на соединение с помощью метода Accept.If you are using a connection-oriented protocol, you must first establish a remote host connection by calling the Connect method or accept an incoming connection request using the Accept method. Если не установить или принять подключение к удаленному узлу, SendTo выдаст SocketException.If you do not establish or accept a remote host connection, SendTo will throw a SocketException. Кроме того, можно установить удаленный узел по умолчанию для протокола без установления соединения перед вызовом метода SendTo.You can also establish a default remote host for a connectionless protocol prior to calling the SendTo method. В любом из этих случаев SendTo пропустит параметр remoteEP и отправит данные только подключенному или удаленному узлу по умолчанию.In either of these cases, SendTo will ignore the remoteEP parameter and only send data to the connected or default remote host.

Блокирующие сокеты блокируются до тех пор, пока не будет отправлено запрошенное число байтов.Blocking sockets will block until the requested number of bytes are sent. Поскольку незаблокированный Socket завершается немедленно, он может не отправить все запрошенные байты в одной операции.Since a nonblocking Socket completes immediately, it might not send all of the bytes requested in a single operation. Ответственность за отслеживание числа отправленных байтов и повтор операции до тех пор, пока приложение не отправит запрошенное число байтов.It is your application's responsibility to keep track of the number of bytes sent and to retry the operation until the application sends the requested number of bytes. Кроме того, не гарантируется, что отправляемые данные будут немедленно отображаться в сети.There is also no guarantee that the data you send will appear on the network immediately. Чтобы повысить эффективность работы сети, базовая система может отложить передачу данных до тех пор, пока не будет собрано значительное количество исходящих.To increase network efficiency, the underlying system may delay transmission until a significant amount of out-going data is collected. Успешное завершение метода SendTo означает, что базовая система имела место для буферизации данных для отправки в сеть.A successful completion of the SendTo method means that the underlying system has had room to buffer your data for a network send.

Если в блокирующем режиме используется протокол без подключения, SendTo будет блокироваться до отправки датаграммы.If you are using a connectionless protocol in blocking mode, SendTo will block until the datagram is sent. Если вы хотите отправить данные на широковещательный адрес, сначала необходимо вызвать метод SetSocketOption и установить параметр сокета в значение SocketOptionName.Broadcast.If you want to send data to a broadcast address, you must first call the SetSocketOption method and set the socket option to SocketOptionName.Broadcast. Кроме того, необходимо убедиться, что число отправленных байтов не превышает максимальный размер пакета для базового поставщика услуг.You must also be sure that the number of bytes sent does not exceed the maximum packet size of the underlying service provider. Если это так, датаграмма не будет отправлена, а SendTo выдаст SocketException.If it does, the datagram will not be sent and SendTo will throw a SocketException.

Note

Если вы получаете SocketException, используйте свойство SocketException.ErrorCode для получения конкретного кода ошибки.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. После получения этого кода обратитесь к документации по коду ошибки API Windows Sockets версии 2 для получения подробного описания ошибки.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Note

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети.This member outputs trace information when you enable network tracing in your application. Дополнительные сведения см. в разделе Сетевая трассировка в .NET Framework.For more information, see Network Tracing in the .NET Framework.

See also

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

Посылает указанное число байтов данных на указанную конечную точку, начиная с заданной позиции буфера и используя указанный объект SocketFlags.Sends the specified number of bytes of data to the specified endpoint, starting at the specified location in the buffer, and using the specified 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

Parameters

buffer
Byte[]

Массив типа Byte, содержащий данные для отправки.An array of type Byte that contains the data to be sent.

offset
Int32

Положение в буфере данных, с которого начинается отправка данных.The position in the data buffer at which to begin sending data.

size
Int32

Число отправляемых байтов.The number of bytes to send.

socketFlags
SocketFlags

Побитовое сочетание значений SocketFlags.A bitwise combination of the SocketFlags values.

remoteEP
EndPoint

Объект EndPoint, представляющий пункт назначения для данных.The EndPoint that represents the destination location for the data.

Returns

Int32

Число отправленных байтов.The number of bytes sent.

Exceptions

Параметр buffer равен null.buffer is null.

-или--or- Параметр remoteEP равен null.remoteEP is null.

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

-или--or- Значение offset превышает длину buffer.offset is greater than the length of buffer.

-или--or- Значение параметра size меньше 0.size is less than 0.

-или--or- Значение size превышает значение, полученное, если отнять от длины buffer значение параметра offset.size is greater than the length of buffer minus the value of the offset parameter.

socketFlags — недопустимое сочетание значений.socketFlags is not a valid combination of values.

-или--or- Произошла ошибка операционной системы при доступе к Socket.An operating system error occurs while accessing the Socket.

Socket был закрыт.The Socket has been closed.

Вызывающий оператор в стеке вызовов не имеет необходимых разрешений.A caller in the call stack does not have the required permissions.

Examples

В следующем примере кода датаграмма без подключения отправляется на указанный удаленный узел.The following code example sends a connectionless datagram to the specified remote host. Смещение, размер и SocketFlags передаются методу SendTo.The offset, size, and SocketFlags are passed to the SendTo method.

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


Remarks

В этой перегрузке, если в качестве параметра socketflags указан флаг DontRoute, отправляемые данные не будут маршрутизироваться.In this overload, if you specify the DontRoute flag as the socketflags parameter, the data you are sending will not be routed.

Если используется протокол без подключения, то перед вызовом SendToне нужно устанавливать удаленный узел по умолчанию с помощью метода Connect.If you are using a connectionless protocol, you do not need to establish a default remote host with the Connect method prior to calling SendTo. Это необходимо сделать только в том случае, если предполагается вызывать метод Send.You only need to do this if you intend to call the Send method. При вызове метода Connect до вызова SendToпараметр remoteEP переопределит указанный удаленный узел по умолчанию только для этой операции отправки.If you do call the Connect method prior to calling SendTo, the remoteEP parameter will override the specified default remote host for that send operation only. Также не требуется вызывать метод Bind, так как базовый поставщик услуг будет назначать наиболее подходящий адрес локальной сети и номер порта.You are also not required to call the Bind method, because the underlying service provider will assign the most appropriate local network address and port number. Если необходимо указать назначенный локальный сетевой адрес и номер порта, можно использовать свойство LocalEndPoint после успешного завершения метода SendTo.If you need to identify the assigned local network address and port number, you can use the LocalEndPoint property after the SendTo method successfully completes.

Несмотря на то, что предназначен для протоколов без подключения, SendTo также работает с протоколами, ориентированными на подключения.Although intended for connectionless protocols, SendTo also works with connection-oriented protocols. Если используется протокол, ориентированный на соединение, необходимо сначала установить соединение с удаленным узлом, вызвав метод Connect или приняв входящий запрос на соединение с помощью метода Accept.If you are using a connection-oriented protocol, you must first establish a remote host connection by calling the Connect method or accept an incoming connection request using the Accept method. Если не установить или принять подключение к удаленному узлу, SendTo выдаст SocketException.If you do not establish or accept a remote host connection, SendTo will throw a SocketException. Кроме того, можно установить удаленный узел по умолчанию для протокола без установления соединения перед вызовом метода SendTo.You can also establish a default remote host for a connectionless protocol prior to calling the SendTo method. В любом из этих случаев SendTo пропустит параметр remoteEP и отправит данные только подключенному или удаленному узлу по умолчанию.In either of these cases, SendTo will ignore the remoteEP parameter and only send data to the connected or default remote host.

Блокирующие сокеты блокируются до тех пор, пока не будет отправлено запрошенное число байтов.Blocking sockets will block until the requested number of bytes are sent. Поскольку Неблокирующая Socket завершается немедленно, она может не отправить все запрошенные байты в одной операции.Since a non-blocking Socket completes immediately, it might not send all of the bytes requested in a single operation. Мы обязаны следить за количеством отправленных байтов и повторить операцию до тех пор, пока приложение не отправит запрошенное число байтов.It is your applications responsibility to keep track of the number of bytes sent and to retry the operation until the application sends the requested number of bytes. Кроме того, не гарантируется, что отправляемые данные будут немедленно отображаться в сети.There is also no guarantee that the data you send will appear on the network immediately. Чтобы повысить эффективность работы сети, базовая система может отложить передачу данных до тех пор, пока не будет собрано значительное количество исходящих.To increase network efficiency, the underlying system may delay transmission until a significant amount of out-going data is collected. Успешное завершение метода SendTo означает, что базовая система имела место для буферизации данных для отправки в сеть.A successful completion of the SendTo method means that the underlying system has had room to buffer your data for a network send.

Если в блокирующем режиме используется протокол без подключения, SendTo будет блокироваться до отправки датаграммы.If you are using a connectionless protocol in blocking mode, SendTo will block until the datagram is sent. Если вы хотите отправить данные на широковещательный адрес, сначала необходимо вызвать метод SetSocketOption и установить параметр сокета в значение SocketOptionName.Broadcast.If you want to send data to a broadcast address, you must first call the SetSocketOption method and set the socket option to SocketOptionName.Broadcast. Кроме того, необходимо убедиться, что размер не превышает максимальный размер пакета для базового поставщика услуг.You must also be sure that the size does not exceed the maximum packet size of the underlying service provider. Если это так, датаграмма не будет отправлена, а SendTo выдаст SocketException.If it does, the datagram will not be sent and SendTo will throw a SocketException.

Note

Если вы получаете SocketException, используйте свойство SocketException.ErrorCode для получения конкретного кода ошибки.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. После получения этого кода обратитесь к документации по коду ошибки API Windows Sockets версии 2 для получения подробного описания ошибки.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Note

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети.This member outputs trace information when you enable network tracing in your application. Дополнительные сведения см. в разделе Сетевая трассировка в .NET Framework.For more information, see Network Tracing in the .NET Framework.

See also

Applies to