Socket.ReceiveMessageFrom 方法

定义

重载

ReceiveMessageFrom(Byte[], Int32, Int32, SocketFlags, EndPoint, IPPacketInformation)

使用指定的 SocketFlags 将指定字节数的数据接收到指定的数据缓冲区位置,并存储终结点和数据包信息。

ReceiveMessageFrom(Span<Byte>, SocketFlags, EndPoint, IPPacketInformation)

使用指定的 socketFlags 将指定字节数的数据接收到指定的数据缓冲区位置,并存储终结点和数据包信息。

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

参数

buffer
Byte[]

类型 Byte 的数组,它是所接受的数据的存储位置。

offset
Int32

buffer 参数中的位置,用于存储所接收的数据。

size
Int32

要接收的字节数。

socketFlags
SocketFlags

SocketFlags 值的按位组合。

remoteEP
EndPoint

EndPoint 类型的引用,该类型与成功接收时要更新的远程主机的终结点相同。

ipPacketInformation
IPPacketInformation

保存地址和接口信息的 IPPacketInformation

返回

收到的字节数。

例外

buffernull

remoteEPnull

offset 小于 0。

offset 大于 buffer 的长度。

size 小于 0。

- 或 -

size 大于 buffer 的长度减去偏移量参数的值。

socketFlags 不是有效的值组合。

- 或 -

未设置 LocalEndPoint 属性。

- 或 -

.NET Framework 运行在 AMD 64 位处理器上。

- 或 -

尝试访问套接字时出错。

注解

方法 ReceiveMessageFrom 将数据读入 buffer 参数,返回成功读取的字节数,并捕获从中发送数据的远程主机终结点,以及有关接收的数据包的信息。

方法 ReceiveMessageFrom 主要用于接收无连接套接字上的消息数据。 套接字的本地地址必须是已知的。 此方法只能与数据报和原始套接字一起使用。 在调用此方法之前,必须使用设置为 DgramRaw 的套接字类型初始化套接字。 这可以在使用 Socket构造套接字时完成。

对于面向消息的套接字,传入消息将放入 buffer 参数中 size ,最大大小为 参数中指定的总大小。 参数 offset 确定数据在 buffer 何处放置。 放入 的实际 buffer 数据量由 ReceiveMessageFrom 方法返回。

方法 ReceiveMessageFrom 自动将 PacketInformation 套接字选项设置为 true 首次为给定 Socket调用时。 但是,返回 IPPacketInformation 的对象仅对设置套接字选项后到达本地计算机的数据包有效。 如果套接字在绑定到本地终结点时通过 方法显式 Bind (,或者由 、、 SendToSendToAsync 方法之一隐式) 并对其方法的第一ConnectAsyncConnect次调用ReceiveMessageFrom发送数据包,则调用 ReceiveMessageFrom 方法将返回这些数据包的无效IPPacketInformation对象。

为了确保所有IPPacketInformation对象都有效,应用程序应在使用 SetSocketOption(SocketOptionLevel, SocketOptionName, Boolean) 方法绑定到本地终结点之前将套接字选项true设置为 PacketInformation

如果应用程序需要知道数据报是使用单播、多播还是广播地址发送的,则可以检查 ipPacketInformation 参数。

注意

AddressFamilyReceiveFrom所用 的 EndPoint 需要与 中SendTo所用 的EndPoint匹配AddressFamily

备注

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

另请参阅

适用于

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

参数

buffer
Span<Byte>

类型Byte为 的 ,Span<T>它是已接收数据的存储位置。

socketFlags
SocketFlags

SocketFlags 值的按位组合。

remoteEP
EndPoint

EndPoint 类型的引用,该类型与成功接收时要更新的远程主机的终结点相同。

ipPacketInformation
IPPacketInformation

保存地址和接口信息的 IPPacketInformation

返回

收到的字节数。

例外

Socket 对象已关闭。

remoteEP EndPointnull

Socket 对象未处于阻止模式,无法接受此同步调用。 在执行此操作之前,必须调用 Bind 方法。

适用于