Socket.ReceiveMessageFrom 方法

定義

多載

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

使用指定的 SocketFlags,將指定的資料位元組數目接收至資料緩衝區的指定位置,並儲存端點及封包資訊。

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

使用指定的 socketFlags,將指定的資料位元組數目接收至資料緩衝區的指定位置,並儲存端點及封包資訊。

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

來源:
Socket.cs
來源:
Socket.cs
來源:
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 。 方法會傳 ReceiveMessageFrom 重播入 中 buffer 的實際資料量。

方法 ReceiveMessageFrom 會在第一次針對指定的 Socket 呼叫時,自動將通訊端選項 true 設定 PacketInformation 為 。 不過,傳 IPPacketInformation 回的物件只有在設定通訊端選項之後抵達本機電腦的封包才有效。 如果通訊端在 系結至本機端點時傳送封包, (方法明確 Bind 系結,或由其中一個 ConnectConnectAsyncSendToSendToAsync 方法隱含) 地傳送封包,則 ReceiveMessageFromReceiveMessageFrom 呼叫 方法會傳回這些封包無效 IPPacketInformation 的物件。

為了確保所有 IPPacketInformation 物件都有效,應用程式應該先將通訊端選項設定 PacketInformationtrue ,再使用 SetSocketOption(SocketOptionLevel, SocketOptionName, Boolean) 方法系結至本機端點。

應用程式可以檢查 ipPacketInformation 參數是否需要知道資料包是否使用單播、多播或廣播位址傳送。

注意

AddressFamily中所 ReceiveFrom 使用 之 的 EndPoint 必須符合 AddressFamilyEndPointSendTo 所使用的 。

注意

在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱.NET Framework 中的網路追蹤

另請參閱

適用於

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

來源:
Socket.cs
來源:
Socket.cs
來源:
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物件已關閉。

EndPointremoteEP 為 null

Socket 物件不是處於封鎖模式,而且無法接受此同步呼叫。 您必須先呼叫 Bind 方法,才能執行這項作業。

適用於