共用方式為


Socket.SendPacketsAsync(SocketAsyncEventArgs) 方法

定義

以非同步的方式將檔案的集合或記憶體中資料緩衝區傳送至連接的 Socket 物件。

public:
 bool SendPacketsAsync(System::Net::Sockets::SocketAsyncEventArgs ^ e);
public bool SendPacketsAsync (System.Net.Sockets.SocketAsyncEventArgs e);
member this.SendPacketsAsync : System.Net.Sockets.SocketAsyncEventArgs -> bool
Public Function SendPacketsAsync (e As SocketAsyncEventArgs) As Boolean

參數

e
SocketAsyncEventArgs

SocketAsyncEventArgs 物件,用於這個非同步通訊端作業。

傳回

若 I/O 作業暫止,則為 true。 作業完成時會引發與 e 參數有關的 Completed 事件。

若 I/O 作業同步完成,則為 false。 在這個情況下,就不會引發與 e 參數有關的 Completed 事件,而在方法呼叫傳回後會立即檢查做為參數傳遞的 e 物件,以擷取作業的結果。

例外狀況

找不到 FilePath 屬性中指定的檔案。

通訊端作業已使用 e 參數內指定的 SocketAsyncEventArgs 物件正在進行中。

Socket 未連接至遠端主機。

正在使用無連接的 Socket,且正在傳送的檔案超出基礎傳輸的封包大小上限。

備註

方法 SendPacketsAsync 可用來將檔案集合或記憶體數據緩衝區中的檔案集合傳送至遠端主機。 Socket必須已經連線到遠端主機。

System.Net.Sockets.SendPacketsElement如果參考工作目錄中的檔案,它可能只以檔名來識別,否則必須指定檔案的完整路徑和名稱。 支援通配符和 UNC 共享名稱。 如果找不到檔案, FileNotFoundException 則會擲回 。

若要收到完成通知,您必須建立回呼方法,以實作 EventHandler<SocketAsyncEventArgs> 委派,並將回呼附加至 SocketAsyncEventArgs.Completed 事件。

參數 SocketAsyncEventArgs.SendPacketsFlags 上的 e 屬性會提供 Window Sockets 服務提供者,並提供有關文件傳輸的其他資訊。 如需如何使用此參數的詳細資訊,請參閱 TransmitFileOptions

需要物件的下列屬性和事件 System.Net.Sockets.SocketAsyncEventArgs ,才能成功呼叫這個方法:

呼叫端可以在呼叫 SendPacketsAsync 方法之前,將 屬性設定SocketAsyncEventArgs.UserToken為任何所需的用戶狀態物件,以便在回呼方法中擷取資訊。 如果回呼需要比單一物件更多的資訊,則可以建立小型類別,以將其他必要狀態資訊保留為成員。

此方法使用 Windows Sockets 2 API 中找到的 TransmitPackets 函式。 如需 TransmitPackets 函式及其旗標的詳細資訊,請參閱 Windows Sockets 檔。

雖然適用於連線導向的通訊協定,但 SendPacketsAsync 方法也適用於無連線通訊協定,前提是您第一次呼叫 BeginConnectConnectConnectAsync 方法來建立預設遠端主機。 使用無連線通訊協定時,您也必須確定檔案的大小不會超過基礎服務提供者的封包大小上限。 如果這樣做,則不會傳送數據報,並 SendPacketsAsync 擲回 SocketException 例外狀況。

方法 SendPacketsAsync 會根據所使用的作業系統進行優化。 在 Windows Server 版本上,此方法 SendPacketsAsync 已針對高效能進行優化。

在 Windows 用戶端版本上,方法 SendPacketsAsync 已針對記憶體和資源使用率下限進行優化。

TransmitFileOptions.UseKernelApc在 參數的 SocketAsyncEventArgs.SendPacketsFlags 屬性e中使用 旗標,可提供顯著的效能優勢。 如果起始方法呼叫的 SendPacketsAsync 線程正用於大量計算,但不太可能會防止啟動APC。 請注意,核心和使用者模式 APC 之間有差異。 當線程處於等候狀態時,核心 APC 就會啟動。 當線程處於可警示等候狀態時,使用者模式 APC 就會啟動

適用於

另請參閱