通过


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)

Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs
Source:
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 数据的目标位置。

返回

已发送的字节数。

例外

buffernull

-或-

remoteEPnull

offset 小于 0。

-或-

offset 大于长度 buffer

-或-

size 小于 0。

-或-

size大于减去参数值的buffer长度offset

socketFlags 不是值的有效组合。

-或-

访问操作系统 Socket时发生错误。

调用堆栈中的调用方没有所需的权限。

示例

下面的代码示例将无连接数据报发送到指定的远程主机。 偏移量、大小以及 SocketFlags 传递给 SendTo 方法。

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

注解

在此重载中,如果将标志指定 DontRoutesocketflags 参数,则不会路由要发送的数据。

如果使用无连接协议,则无需在调用SendTo之前使用Connect该方法建立默认远程主机。 仅当打算调用 Send 该方法时,才需要执行此操作。 如果在调用ConnectSendTo之前调用该方法,该remoteEP参数将仅覆盖该发送操作的指定默认远程主机。 你也不需要调用 Bind 该方法,因为基础服务提供商将分配最合适的本地网络地址和端口号。 如果需要标识分配的本地网络地址和端口号,可以在方法成功完成后SendTo使用该LocalEndPoint属性。

尽管适用于无连接协议, SendTo 但也适用于面向连接的协议。 如果使用面向连接的协议,则必须首先通过调用 Connect 该方法或接受使用 Accept 该方法的传入连接请求来建立远程主机连接。 如果未建立或接受远程主机连接, SendTo 将引发一个 SocketException。 在调用 SendTo 该方法之前,还可以为无连接协议建立默认远程主机。 在上述任一情况下, SendTo 都将忽略 remoteEP 参数,并将数据发送到连接的或默认的远程主机。

阻止套接字将阻止,直到发送请求的字节数。 由于非阻塞 Socket 会立即完成,因此它可能不会发送单个操作中请求的所有字节。 应用程序负责跟踪发送的字节数,并重试操作,直到应用程序发送请求的字节数。 也不保证你发送的数据将立即显示在网络上。 为了提高网络效率,基础系统可能会延迟传输,直到收集大量外出数据。 方法的 SendTo 成功完成意味着基础系统有空间来缓冲网络发送的数据。

如果在阻止模式下使用无连接协议, SendTo 则在发送数据报之前将阻止。 如果要将数据发送到广播地址,必须首先调用 SetSocketOption 该方法并将套接字选项设置为 SocketOptionName.Broadcast。 还必须确保大小不超过基础服务提供商的最大数据包大小。 如果这样做,则不会发送数据报并 SendTo 引发数据 SocketException报。

注释

如果收到, SocketException请使用该 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,有关错误的详细说明,请参阅 Windows 套接字版本 2 API 错误代码 文档。

注释

在应用程序中启用网络跟踪时,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪

另请参阅

适用于

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

Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs
Source:
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 数据的目标位置。

返回

已发送的字节数。

例外

buffernull

-或-

remoteEPnull

指定的 sizebuffer超过大小 。

尝试访问套接字时出错。

示例

下面的代码示例将无连接数据报发送到指定的远程主机。 大小并 SocketFlags 传递给 SendTo 方法。

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。 如果将标志指定 DontRoutesocketflags 参数,则不会路由要发送的数据。

如果使用无连接协议,则无需在调用SendTo之前使用Connect该方法建立默认远程主机。 仅当打算调用 Send 该方法时,才需要执行此操作。 如果在调用ConnectSendTo之前调用该方法,该remoteEP参数将仅覆盖该发送操作的指定默认远程主机。 你也不需要调用 Bind 该方法,因为基础服务提供商将分配最合适的本地网络地址和端口号。 如果需要标识分配的本地网络地址和端口号,可以在方法成功完成后SendTo使用该LocalEndPoint属性。

尽管适用于无连接协议, SendTo 但也适用于面向连接的协议。 如果使用面向连接的协议,则必须首先通过调用 Connect 该方法或接受使用 Accept 该方法的传入连接请求来建立远程主机连接。 如果未建立或接受远程主机连接, SendTo 将引发一个 SocketException。 在调用 SendTo 该方法之前,还可以为无连接协议建立默认远程主机。 在上述任一情况下, SendTo 都将忽略 remoteEP 参数,并将数据发送到连接的或默认的远程主机。

阻止套接字将阻止,直到发送请求的字节数。 由于非阻止 Socket 会立即完成,因此它可能不会发送单个操作中请求的所有字节。 应用程序负责跟踪发送的字节数,并重试操作,直到应用程序发送请求的字节数。 也不保证你发送的数据将立即显示在网络上。 为了提高网络效率,基础系统可能会延迟传输,直到收集大量外出数据。 方法的 SendTo 成功完成意味着基础系统有空间来缓冲网络发送的数据。

如果在阻止模式下使用无连接协议, SendTo 则在发送数据报之前将阻止。 如果要将数据发送到广播地址,必须首先调用 SetSocketOption 该方法并将套接字选项设置为 SocketOptionName.Broadcast。 还必须确保发送的字节数不超过基础服务提供商的最大数据包大小。 如果这样做,则不会发送数据报并 SendTo 引发数据 SocketException报。

注释

如果收到, SocketException请使用该 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,有关错误的详细说明,请参阅 Windows 套接字版本 2 API 错误代码 文档。

注释

在应用程序中启用网络跟踪时,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪

另请参阅

适用于

SendTo(ReadOnlySpan<Byte>, SocketFlags, SocketAddress)

Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs
Source:
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 数据的目标。

返回

已发送的字节数。

例外

socketAddressnull

尝试访问套接字时出错。

适用于

SendTo(ReadOnlySpan<Byte>, EndPoint)

Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs
Source:
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 数据的目标。

返回

已发送的字节数。

例外

remoteEPnull

尝试访问套接字时出错。

适用于

SendTo(Byte[], SocketFlags, EndPoint)

Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs
Source:
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 数据的目标位置。

返回

已发送的字节数。

例外

buffernull

-或-

remoteEPnull

尝试访问套接字时出错。

示例

下面的代码示例将无连接数据报发送到指定的远程主机。 SocketFlags 传递给 SendTo 方法。

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字节数。 如果将标志指定 DontRoutesocketflags 参数,则不会路由要发送的数据。

如果使用无连接协议,则无需在调用SendTo之前使用Connect该方法建立默认远程主机。 仅当打算调用 Send 该方法时,才需要执行此操作。 如果在调用ConnectSendTo之前调用该方法,该remoteEP参数将仅覆盖该发送操作的指定默认远程主机。 你也不需要调用 Bind 该方法,因为基础服务提供商将分配最合适的本地网络地址和端口号。 如果需要标识分配的本地网络地址和端口号,可以在方法成功完成后SendTo使用该LocalEndPoint属性。

尽管适用于无连接协议, SendTo 但也适用于面向连接的协议。 如果使用面向连接的协议,则必须首先通过调用 Connect 该方法或接受使用 Accept 该方法的传入连接请求来建立远程主机连接。 如果未建立或接受远程主机连接, SendTo 将引发一个 SocketException。 在调用 SendTo 该方法之前,还可以为无连接协议建立默认远程主机。 在上述任一情况下, SendTo 都将忽略 remoteEP 参数,并将数据发送到连接的或默认的远程主机。

阻止套接字将阻止,直到发送请求的所有字节 buffer 。 由于非阻止Socket会立即完成,因此它可能不会发送所有字节。buffer 应用程序负责跟踪发送的字节数,并重试操作,直到应用程序发送所有字节 buffer。 也不保证你发送的数据将立即显示在网络上。 为了提高网络效率,基础系统可能会延迟传输,直到收集大量外出数据。 方法的 SendTo 成功完成意味着基础系统有空间来缓冲网络发送的数据。

如果在阻止模式下使用无连接协议, SendTo 则在发送数据报之前将阻止。 如果要将数据发送到广播地址,必须首先调用 SetSocketOption 该方法并将套接字选项设置为 SocketOptionName.Broadcast。 还必须确保发送的字节数不超过基础服务提供商的最大数据包大小。 如果这样做,则不会发送数据报并 SendTo 引发数据 SocketException报。

注释

如果收到, SocketException请使用该 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,有关错误的详细说明,请参阅 Windows 套接字版本 2 API 错误代码 文档。

注释

在应用程序中启用网络跟踪时,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪

另请参阅

适用于

SendTo(Byte[], EndPoint)

Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs
Source:
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 数据的目标。

返回

已发送的字节数。

例外

buffernull

-或-

remoteEPnull

尝试访问套接字时出错。

示例

下面的代码示例将无连接数据报发送到指定的远程主机。

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。

如果使用无连接协议,则无需在调用SendTo之前使用Connect该方法建立默认远程主机。 仅当打算调用 Send 该方法时,才需要执行此操作。 如果在调用ConnectSendTo之前调用该方法,该remoteEP参数将仅覆盖该发送操作的指定默认远程主机。 你也不需要调用 Bind 该方法,因为基础服务提供商将分配最合适的本地网络地址和端口号。 如果需要标识分配的本地网络地址和端口号,可以在方法成功完成后SendTo使用该LocalEndPoint属性。

尽管适用于无连接协议, SendTo 但也适用于面向连接的协议。 如果使用面向连接的协议,则必须首先通过调用 Connect 该方法或接受使用 Accept 该方法的传入连接请求来建立远程主机连接。 如果未建立或接受远程主机连接, SendTo 将引发一个 SocketException。 在调用 SendTo 该方法之前,还可以为无连接协议建立默认远程主机。 在上述任一情况下, SendTo 都将忽略 remoteEP 参数,并将数据发送到连接的或默认的远程主机。

阻止套接字将阻止,直到发送缓冲区中的所有字节。 由于非阻止Socket会立即完成,因此它可能不会发送所有字节。buffer 应用程序负责跟踪发送的字节数,并重试操作,直到应用程序发送所有字节 buffer。 也不保证你发送的数据将立即显示在网络上。 为了提高网络效率,基础系统可能会延迟传输,直到收集大量传出数据。 方法的 SendTo 成功完成意味着基础系统有空间来缓冲网络发送的数据。

如果在阻止模式下使用无连接协议, SendTo 则在发送数据报之前将阻止。 如果要将数据发送到广播地址,必须首先调用 SetSocketOption 该方法并将套接字选项设置为 SocketOptionName.Broadcast。 还必须确保发送的字节数不超过基础服务提供商的最大数据包大小。 如果这样做,则不会发送数据报并 SendTo 引发数据 SocketException报。

注释

如果收到, SocketException请使用该 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,有关错误的详细说明,请参阅 Windows 套接字版本 2 API 错误代码 文档。

注释

在应用程序中启用网络跟踪时,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪

另请参阅

适用于

SendTo(ReadOnlySpan<Byte>, SocketFlags, EndPoint)

Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs
Source:
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 数据的目标。

返回

已发送的字节数。

例外

remoteEPnull

尝试访问套接字时出错。

适用于