2009-10-20 99 views
2

我的問題很簡單,就是使用TCP協議的異步套接字。使用異步套接字的回調

當我用「BeginSend」方法發送一些數據時,回調被調用的時間是什麼?

當數據剛剛發送到網絡,或者當我們確保數據到達目的地(比如它應該與TCP規範有關)時,它會被調用嗎?

感謝您的回答。

KiTe。

ps:對不起,如果我的英語有點不好^ ^。

回答

3

從MSDN:

「當你的應用程序調用BeginSend,系統將使用一個單獨的線程執行指定的回調方法,並直至插槽發送請求的字節數或拋出異常的EndSend將阻止「。

「發送成功完成並不表示數據已成功發送,如果傳輸系統中沒有可用的緩衝空間來保存要發送的數據,發送將被阻塞,除非套接字已被置於非阻塞狀態模式。」

http://msdn.microsoft.com/en-us/library/38dxf7kt.aspx

+0

注意這與BeginReceive/EndReceive不同。 – Jess 2010-10-20 02:32:05

3

當回調被調用,你可以肯定的是,數據已經從輸出緩衝器清零(異步操作使用一個單獨的線程,以確保您的調用線程沒有被阻塞的情況下,沒有在發送緩衝區中的房間,並且它必須等待發送日期),並且它將達到它的目的地 - 但不是已經到達了。

但是,由於TCP協議的本質,您可以肯定(當然,我想幾乎可以肯定)它最終會到達目的地。

但是,出於計時目的,您不應該將回調的時間視爲與數據到達另一方的時間相同。

+0

好的謝謝你們,這正是我正在尋找的東西。 – KiTe 2009-10-20 13:54:32

+0

不客氣 – 2009-10-20 13:55:22