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方法會自動將套接字選項true
設定PacketInformation為第一次針對指定的Socket呼叫。 不過,傳 IPPacketInformation 回的物件只適用於在設定套接字選項之後抵達本機計算機的封包。 如果套接字在 系結至本機端點時傳送封包, (由 方法明確 Bind (,或由其中一個 Connect、 ConnectAsync、 SendTo或 SendToAsync) 方法隱含地傳送至 方法,則ReceiveMessageFromReceiveMessageFrom呼叫 方法會傳回這些封包的無效IPPacketInformation物件。
為了確保所有IPPacketInformation物件都有效,應用程式應該先將套接字選項true
設定PacketInformation為 ,再使用 SetSocketOption(SocketOptionLevel, SocketOptionName, Boolean) 方法系結至本機端點。
應用程式可以使用單播、多播或廣播位址來檢查 ipPacketInformation
參數是否需要知道數據報是否已傳送。
注意
AddressFamily EndPoint中ReceiveFrom所使用的 必須符合 EndPointAddressFamily 中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。
傳回
收到的位元組數目。
例外狀況
EndPoint remoteEP 為 null
。
AddressFamily EndPoint中ReceiveMessageFrom(Span<Byte>, SocketFlags, EndPoint, IPPacketInformation)所使用的 必須符合 EndPointAddressFamily SendTo 中使用的 。
Socket 物件不是處於封鎖模式,而且無法接受此同步呼叫。 您必須先呼叫 Bind 方法,才能執行這項作業。