Socket.ReceiveMessageFrom 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
多載
| 名稱 | Description |
|---|---|
| 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
- 來源:
- 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
- 來源:
- 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 方法,才能執行這項作業。