Socket.ReceiveMessageFrom 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
重载
| 名称 | 说明 |
|---|---|
| ReceiveMessageFrom(Byte[], Int32, Int32, SocketFlags, EndPoint, IPPacketInformation) |
使用指定的数据缓冲区将指定的字节数接收到数据缓冲区的指定 SocketFlags位置,并存储终结点和数据包信息。 |
| ReceiveMessageFrom(Span<Byte>, SocketFlags, EndPoint, IPPacketInformation) |
使用指定的数据缓冲区将指定的字节数接收到数据缓冲区的指定 |
ReceiveMessageFrom(Byte[], Int32, Int32, SocketFlags, EndPoint, IPPacketInformation)
- Source:
- Socket.cs
- Source:
- Socket.cs
- Source:
- Socket.cs
- Source:
- Socket.cs
- Source:
- Socket.cs
使用指定的数据缓冲区将指定的字节数接收到数据缓冲区的指定 SocketFlags位置,并存储终结点和数据包信息。
public:
int ReceiveMessageFrom(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags % socketFlags, System::Net::EndPoint ^ % remoteEP, [Runtime::InteropServices::Out] System::Net::Sockets::IPPacketInformation % ipPacketInformation);
public int ReceiveMessageFrom(byte[] buffer, int offset, int size, ref System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP, out System.Net.Sockets.IPPacketInformation ipPacketInformation);
member this.ReceiveMessageFrom : byte[] * int * int * SocketFlags * EndPoint * IPPacketInformation -> int
Public Function ReceiveMessageFrom (buffer As Byte(), offset As Integer, size As Integer, ByRef socketFlags As SocketFlags, ByRef remoteEP As EndPoint, ByRef ipPacketInformation As IPPacketInformation) As Integer
参数
- offset
- Int32
参数中 buffer 用于存储接收数据的位置。
- size
- Int32
要接收的字节数。
- socketFlags
- SocketFlags
值的按位组合 SocketFlags 。
- ipPacketInformation
- IPPacketInformation
IPPacketInformation保存地址和接口信息。
返回
收到的字节数。
例外
offset 小于 0。
-或-
offset 大于长度 buffer。
-或-
size 小于 0。
-或-
size 大于减去偏移参数值的长度 buffer 。
注解
该方法 ReceiveMessageFrom 将数据读取到 buffer 参数中,返回成功读取的字节数,并捕获从中发送数据的远程主机终结点以及有关接收的数据包的信息。
该方法 ReceiveMessageFrom 主要用于接收无连接套接字上的消息数据。 套接字的本地地址必须已知。 此方法只能用于数据报和原始套接字。 必须使用设置为或调用此方法之前设置 Dgram 的 Raw 套接字类型初始化套接字。 使用套接字构造 Socket时,可以执行此操作。
对于面向消息的套接字,传入消息将放入 buffer 参数中,最大大小为参数中指定的 size 总大小。 该 offset 参数确定数据中的 buffer 放置位置。 方法返回buffer放入ReceiveMessageFrom其中的实际数据量。
该方法ReceiveMessageFrom自动将套接字选项设置为PacketInformationtrue首次调用给定Socket的套接字选项。 但是,返回 IPPacketInformation 的对象仅对设置套接字选项后到达本地计算机的数据包有效。 如果套接字在绑定到本地终结点(由方法显式或Bind由其中一个、或Connect方法隐式调用)和对该方法的第一ConnectAsyncSendToSendToAsync次调用之间发送数据包,则对方法的调用ReceiveMessageFromReceiveMessageFrom将返回这些数据包的无效IPPacketInformation对象。
为了确保所有IPPacketInformation对象都有效,应用程序应在使用PacketInformation该方法绑定到本地终结点之前将套接字选项设置为true该选项SetSocketOption(SocketOptionLevel, SocketOptionName, Boolean)。
如果应用程序需要使用单播、多播或广播地址来发送数据报,则可以检查 ipPacketInformation 参数。
注释
AddressFamily EndPoint使用的项ReceiveFrom需要与所使用的项AddressFamily匹配EndPointSendTo。
注释
在应用程序中启用网络跟踪时,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的 Network Tracing。
另请参阅
- Connect(EndPoint)
- ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)
- Available
- Shutdown(SocketShutdown)
- Close()
适用于
ReceiveMessageFrom(Span<Byte>, SocketFlags, EndPoint, IPPacketInformation)
- Source:
- Socket.cs
- Source:
- Socket.cs
- Source:
- Socket.cs
- Source:
- Socket.cs
- Source:
- Socket.cs
使用指定的数据缓冲区将指定的字节数接收到数据缓冲区的指定 socketFlags位置,并存储终结点和数据包信息。
public:
int ReceiveMessageFrom(Span<System::Byte> buffer, System::Net::Sockets::SocketFlags % socketFlags, System::Net::EndPoint ^ % remoteEP, [Runtime::InteropServices::Out] System::Net::Sockets::IPPacketInformation % ipPacketInformation);
public int ReceiveMessageFrom(Span<byte> buffer, ref System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP, out System.Net.Sockets.IPPacketInformation ipPacketInformation);
member this.ReceiveMessageFrom : Span<byte> * SocketFlags * EndPoint * IPPacketInformation -> int
Public Function ReceiveMessageFrom (buffer As Span(Of Byte), ByRef socketFlags As SocketFlags, ByRef remoteEP As EndPoint, ByRef ipPacketInformation As IPPacketInformation) As Integer
参数
- socketFlags
- SocketFlags
值的按位组合 SocketFlags 。
- ipPacketInformation
- IPPacketInformation
IPPacketInformation保存地址和接口信息。
返回
收到的字节数。
例外
对象 Socket 已关闭。
EndPoint remoteEP 为 null.
AddressFamily EndPoint使用的项ReceiveMessageFrom(Span<Byte>, SocketFlags, EndPoint, IPPacketInformation)需要与 SendTo 中使用的项EndPoint匹配AddressFamily。
对象 Socket 不在阻止模式下,无法接受此同步调用。 在执行此操作之前,必须调用 Bind 方法。