我的問題很簡單,就是使用TCP協議的異步套接字。使用異步套接字的回調
當我用「BeginSend」方法發送一些數據時,回調被調用的時間是什麼?
當數據剛剛發送到網絡,或者當我們確保數據到達目的地(比如它應該與TCP規範有關)時,它會被調用嗎?
感謝您的回答。
KiTe。
ps:對不起,如果我的英語有點不好^ ^。
我的問題很簡單,就是使用TCP協議的異步套接字。使用異步套接字的回調
當我用「BeginSend」方法發送一些數據時,回調被調用的時間是什麼?
當數據剛剛發送到網絡,或者當我們確保數據到達目的地(比如它應該與TCP規範有關)時,它會被調用嗎?
感謝您的回答。
KiTe。
ps:對不起,如果我的英語有點不好^ ^。
從MSDN:
「當你的應用程序調用BeginSend,系統將使用一個單獨的線程執行指定的回調方法,並直至插槽發送請求的字節數或拋出異常的EndSend將阻止「。
「發送成功完成並不表示數據已成功發送,如果傳輸系統中沒有可用的緩衝空間來保存要發送的數據,發送將被阻塞,除非套接字已被置於非阻塞狀態模式。」
當回調被調用,你可以肯定的是,數據已經從輸出緩衝器清零(異步操作使用一個單獨的線程,以確保您的調用線程沒有被阻塞的情況下,沒有在發送緩衝區中的房間,並且它必須等待發送日期),並且它將達到它的目的地 - 但不是已經到達了。
但是,由於TCP協議的本質,您可以肯定(當然,我想幾乎可以肯定)它最終會到達目的地。
但是,出於計時目的,您不應該將回調的時間視爲與數據到達另一方的時間相同。
好的謝謝你們,這正是我正在尋找的東西。 – KiTe 2009-10-20 13:54:32
不客氣 – 2009-10-20 13:55:22
注意這與BeginReceive/EndReceive不同。 – Jess 2010-10-20 02:32:05