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
使用指定的 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
的长度减去偏移量参数的值。
socketFlags
不是有效的值组合。
- 或 -
未设置 LocalEndPoint 属性。
- 或 -
.NET Framework 运行在 AMD 64 位处理器上。
- 或 -
尝试访问套接字时出错。
注解
方法 ReceiveMessageFrom 将数据读入 buffer
参数,返回成功读取的字节数,并捕获从中发送数据的远程主机终结点,以及有关接收的数据包的信息。
方法 ReceiveMessageFrom 主要用于接收无连接套接字上的消息数据。 套接字的本地地址必须是已知的。 此方法只能与数据报和原始套接字一起使用。 在调用此方法之前,必须使用设置为 Dgram 或 Raw 的套接字类型初始化套接字。 这可以在使用 Socket构造套接字时完成。
对于面向消息的套接字,传入消息将放入 buffer
参数中 size
,最大大小为 参数中指定的总大小。 参数 offset
确定数据在 buffer
何处放置。 放入 的实际 buffer
数据量由 ReceiveMessageFrom 方法返回。
方法 ReceiveMessageFrom 自动将 PacketInformation 套接字选项设置为 true
首次为给定 Socket调用时。 但是,返回 IPPacketInformation 的对象仅对设置套接字选项后到达本地计算机的数据包有效。 如果套接字在绑定到本地终结点时通过 方法显式 Bind (,或者由 、、 SendTo或 SendToAsync 方法之一隐式) 并对其方法的第一ConnectAsyncConnect次调用ReceiveMessageFrom发送数据包,则调用 ReceiveMessageFrom 方法将返回这些数据包的无效IPPacketInformation对象。
为了确保所有IPPacketInformation对象都有效,应用程序应在使用 SetSocketOption(SocketOptionLevel, SocketOptionName, Boolean) 方法绑定到本地终结点之前将套接字选项true
设置为 PacketInformation 。
如果应用程序需要知道数据报是使用单播、多播还是广播地址发送的,则可以检查 ipPacketInformation
参数。
注意
AddressFamily中ReceiveFrom所用 的 EndPoint 需要与 中SendTo所用 的EndPoint匹配AddressFamily。
备注
当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪。
另请参阅
- 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
使用指定的 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 对象已关闭。
remoteEP EndPoint 为 null
。
AddressFamily中ReceiveMessageFrom(Span<Byte>, SocketFlags, EndPoint, IPPacketInformation)所用 的 EndPoint 需要与 SendTo 中使用的 的EndPoint匹配AddressFamily。
Socket 对象未处于阻止模式,无法接受此同步调用。 在执行此操作之前,必须调用 Bind 方法。