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
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框架在 AMD 64 位处理器上运行。

-或-

尝试访问套接字时出错。

注解

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

该方法 ReceiveMessageFrom 主要用于接收无连接套接字上的消息数据。 套接字的本地地址必须已知。 此方法只能用于数据报和原始套接字。 必须使用设置为或调用此方法之前设置 DgramRaw 套接字类型初始化套接字。 使用套接字构造 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

另请参阅

适用于

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

参数

buffer
Span<Byte>

Span<T>作为接收数据的存储位置的类型Byte

socketFlags
SocketFlags

值的按位组合 SocketFlags

remoteEP
EndPoint

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

ipPacketInformation
IPPacketInformation

IPPacketInformation保存地址和接口信息。

返回

收到的字节数。

例外

对象 Socket 已关闭。

EndPoint remoteEP 为 null.

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

适用于