Socket.ReceiveMessageFrom 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
多載
ReceiveMessageFrom(Byte[], Int32, Int32, SocketFlags, EndPoint, IPPacketInformation) |
使用指定的 SocketFlags,將指定的資料位元組數目接收至資料緩衝區的指定位置,並儲存端點及封包資訊。 |
ReceiveMessageFrom(Span<Byte>, SocketFlags, EndPoint, IPPacketInformation) |
使用指定的 |
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
參數
- 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
。 方法會傳 ReceiveMessageFrom 重播入 中 buffer
的實際資料量。
方法 ReceiveMessageFrom 會在第一次針對指定的 Socket 呼叫時,自動將通訊端選項 true
設定 PacketInformation 為 。 不過,傳 IPPacketInformation 回的物件只有在設定通訊端選項之後抵達本機電腦的封包才有效。 如果通訊端在 系結至本機端點時傳送封包, (方法明確 Bind 系結,或由其中一個 Connect 、 ConnectAsync 、 SendTo 或 SendToAsync 方法隱含) 地傳送封包,則 ReceiveMessageFromReceiveMessageFrom 呼叫 方法會傳回這些封包無效 IPPacketInformation 的物件。
為了確保所有 IPPacketInformation 物件都有效,應用程式應該先將通訊端選項設定 PacketInformation 為 true
,再使用 SetSocketOption(SocketOptionLevel, SocketOptionName, Boolean) 方法系結至本機端點。
應用程式可以檢查 ipPacketInformation
參數是否需要知道資料包是否使用單播、多播或廣播位址傳送。
注意
AddressFamily中所 ReceiveFrom 使用 之 的 EndPoint 必須符合 AddressFamilyEndPoint 中 SendTo 所使用的 。
注意
在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱.NET Framework 中的網路追蹤。
另請參閱
- Connect(EndPoint)
- ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)
- Available
- Shutdown(SocketShutdown)
- Close()
適用於
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
參數
- socketFlags
- SocketFlags
SocketFlags 值的位元組合。
- ipPacketInformation
- IPPacketInformation
保留位址及介面資訊的 IPPacketInformation。
傳回
收到的位元組數目。
例外狀況
EndPointremoteEP 為 null
。
AddressFamily中所 ReceiveMessageFrom(Span<Byte>, SocketFlags, EndPoint, IPPacketInformation) 使用 之 的 EndPoint 必須符合 AddressFamilyEndPoint SendTo 中使用的 。
Socket 物件不是處於封鎖模式,而且無法接受此同步呼叫。 您必須先呼叫 Bind 方法,才能執行這項作業。
適用於
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應