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,將指定的資料位元組數目接收至資料緩衝區的指定位置,並儲存端點及封包資訊。

C#
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);

參數

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方法會自動將套接字選項true設定PacketInformation為第一次針對指定的Socket呼叫。 不過,傳 IPPacketInformation 回的物件只適用於在設定套接字選項之後抵達本機計算機的封包。 如果套接字在 系結至本機端點時傳送封包, (由 方法明確 Bind (,或由其中一個 ConnectConnectAsyncSendToSendToAsync) 方法隱含地傳送至 方法,則ReceiveMessageFromReceiveMessageFrom呼叫 方法會傳回這些封包的無效IPPacketInformation物件。

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

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

備註

AddressFamily EndPointReceiveFrom所使用的 必須符合 EndPointAddressFamilySendTo所使用的 。

備註

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

另請參閱

適用於

.NET 10 和其他版本
產品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.6, 2.0, 2.1

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

來源:
Socket.cs
來源:
Socket.cs
來源:
Socket.cs

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

C#
public int ReceiveMessageFrom(Span<byte> buffer, ref System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP, out System.Net.Sockets.IPPacketInformation ipPacketInformation);

參數

buffer
Span<Byte>

Span<T>Byte別的 ,這是已接收資料的儲存位置。

socketFlags
SocketFlags

SocketFlags 值的位元組合。

remoteEP
EndPoint

與成功接收時要更新之遠端主機端點相同類型的 參考 EndPoint

ipPacketInformation
IPPacketInformation

保留位址及介面資訊的 IPPacketInformation

傳回

收到的位元組數目。

例外狀況

Socket物件已關閉。

EndPoint remoteEP 為 null

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

適用於

.NET 10 和其他版本
產品 版本
.NET 6, 7, 8, 9, 10