Socket.SendTo 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
将数据发送到特定终结点。
重载
| 名称 | 说明 |
|---|---|
| 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
参数
- offset
- Int32
数据缓冲区中开始发送数据的位置。
- size
- Int32
要发送的字节数。
- socketFlags
- SocketFlags
值的按位组合 SocketFlags 。
返回
已发送的字节数。
例外
offset 小于 0。
-或-
offset 大于长度 buffer。
-或-
size 小于 0。
-或-
size大于减去参数值的buffer长度offset。
调用堆栈中的调用方没有所需的权限。
示例
下面的代码示例将无连接数据报发送到指定的远程主机。 偏移量、大小以及 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
注解
在此重载中,如果将标志指定 DontRoute 为 socketflags 参数,则不会路由要发送的数据。
如果使用无连接协议,则无需在调用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 中的网络跟踪。
另请参阅
- Connect(EndPoint)
- Bind(EndPoint)
- Send(Byte[], Int32, SocketFlags)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
- LocalEndPoint
适用于
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
参数
- size
- Int32
要发送的字节数。
- socketFlags
- SocketFlags
值的按位组合 SocketFlags 。
返回
已发送的字节数。
例外
指定的 size 值 buffer超过大小 。
尝试访问套接字时出错。
示例
下面的代码示例将无连接数据报发送到指定的远程主机。 大小并 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。 如果将标志指定 DontRoute 为 socketflags 参数,则不会路由要发送的数据。
如果使用无连接协议,则无需在调用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 中的网络跟踪。
另请参阅
- Connect(EndPoint)
- Bind(EndPoint)
- Send(Byte[], Int32, SocketFlags)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
- LocalEndPoint
适用于
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 数据的目标。
返回
已发送的字节数。
例外
socketAddress 是 null。
尝试访问套接字时出错。
适用于
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 是 null。
尝试访问套接字时出错。
适用于
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
参数
- socketFlags
- SocketFlags
值的按位组合 SocketFlags 。
返回
已发送的字节数。
例外
尝试访问套接字时出错。
示例
下面的代码示例将无连接数据报发送到指定的远程主机。 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字节数。 如果将标志指定 DontRoute 为 socketflags 参数,则不会路由要发送的数据。
如果使用无连接协议,则无需在调用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 中的网络跟踪。
另请参阅
- Connect(EndPoint)
- Bind(EndPoint)
- Send(Byte[], Int32, SocketFlags)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
- LocalEndPoint
适用于
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
参数
返回
已发送的字节数。
例外
尝试访问套接字时出错。
示例
下面的代码示例将无连接数据报发送到指定的远程主机。
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 中的网络跟踪。
另请参阅
- Connect(EndPoint)
- Bind(EndPoint)
- Send(Byte[], Int32, SocketFlags)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
- LocalEndPoint
适用于
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 是 null。
尝试访问套接字时出错。