Socket.BeginReceiveFrom 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
開始從指定的網路裝置非同步接收資料。
public:
IAsyncResult ^ BeginReceiveFrom(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ % remoteEP, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginReceiveFrom (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP, AsyncCallback? callback, object? state);
public IAsyncResult BeginReceiveFrom (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP, AsyncCallback callback, object state);
member this.BeginReceiveFrom : byte[] * int * int * System.Net.Sockets.SocketFlags * EndPoint * AsyncCallback * obj -> IAsyncResult
Public Function BeginReceiveFrom (buffer As Byte(), offset As Integer, size As Integer, socketFlags As SocketFlags, ByRef remoteEP As EndPoint, callback As AsyncCallback, state As Object) As IAsyncResult
參數
- offset
- Int32
buffer
參數中要儲存資料的以零起始的位置。
- size
- Int32
要接收的位元組數。
- socketFlags
- SocketFlags
SocketFlags 值的位元組合。
- callback
- AsyncCallback
AsyncCallback 委派。
- state
- Object
物件,包含這個要求的狀態資訊。
傳回
參考非同步讀取的 IAsyncResult。
例外狀況
.NET Framework 和 .NET 5 和更早版本:嘗試存取套接字時發生錯誤。
offset
小於 0。
-或-
offset
大於 buffer
的長度。
-或-
size
小於 0。
-或-
size
大於 buffer
的長度減去 offset
參數的值。
在呼叫堆疊中位置較高的呼叫端對於要求的作業沒有權限。
備註
重要
這是相容性 API。 不建議使用 APM (Begin*
和 End*
) 方法來進行新的開發。 請改用型對 Task
等專案。
您可以傳遞實作 AsyncCallbackBeginReceiveFrom 的回呼,以取得作業完成的通知。 請注意,如果基礎網路堆疊以同步方式完成作業,則會在呼叫 BeginReceiveFrom期間內嵌執行回呼。 在此情況下, CompletedSynchronously 傳回 IAsyncResult 的 屬性會設定為 true
,以指出方法已同步完成。
AsyncState使用 的 IAsyncResult 屬性,取得傳遞至 BeginReceiveFrom 方法的狀態物件。
異步 BeginReceiveFrom 操作必須藉由呼叫 EndReceiveFrom 方法來完成。 一般而言,委派會叫 AsyncCallback 用 方法。 EndReceiveFrom 將會封鎖呼叫線程,直到作業完成為止。
此方法會將數據讀取至 buffer
參數,並擷取傳送數據的遠端主機端點。 如需如何擷取此端點的資訊,請參閱 EndReceiveFrom。 如果您想要從未知主機或多部主機異步接收無連線數據報,這個方法最有用。 在這些情況下, BeginReceiveFrom 會將第一個加入佇列的數據報讀取到局域網路緩衝區中。 如果您收到的資料報大於的大小 buffer
, BeginReceiveFrom 則 方法會盡可能填滿 buffer
大部分的訊息,並擲回 SocketException。 如果您使用不可靠的通訊協定,將會遺失多餘的數據。 如果您使用可靠的通訊協議,服務提供者將會保留多餘的數據,而且您可以藉由呼叫 BeginReceiveFrom 具有足夠大緩衝區的 方法來擷取數據。
為了保證一律傳回遠端主機端點,應用程式應該使用 Bind 方法明確系結Socket至本機端點,然後將 參數設定為 或 IPv6 適當地呼叫 SetSocketOption 方法、optionName
將 參數設定IPPacketInformation為 ,以及optionValue
呼叫 方法optionLevel
之前BeginReceiveFrom啟用此選項的參數。 否則,當傳送者在呼叫 方法之前傳送一些數據報時 BeginReceiveFrom ,遠端主機端點就可能不會傳回。
雖然 BeginReceiveFrom 適用於無連線通訊協定,但您也可以使用連線導向通訊協定。 如果您選擇這樣做,您必須先呼叫 方法來建立遠端主機連線,或藉由呼叫 ConnectBeginConnectAccept / 或 BeginAccept 方法來接受連入連線要求。 如果您在建立或接受連線之前呼叫 BeginReceiveFrom 方法,您將會收到 SocketException。 您也可以在呼叫 BeginReceiveFrom 方法之前,先建立無連線通訊協定的默認遠端主機。
參數remoteEp
使用連接導向套接字時, BeginReceiveFrom 將會讀取最多可用到 參數所 size
指定位元元組數目的數據。
若要取消暫止 BeginReceiveFrom的 ,請呼叫 Close 方法。
注意
如果您收到 SocketException,請使用 SocketException.ErrorCode 屬性來取得特定的錯誤碼。
注意
在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .NET Framework 中的網路追蹤。
注意
系統會快 Socket 取異步方法 (安全性內容、模擬使用者和呼叫內容) 的執行內容。 在第一次使用特定內容 (特定異步 Socket 方法、特定 Socket 實例和特定回呼) 之後,該內容的後續使用將會看到效能改善。