2011-04-28 55 views
1

我對C#比較陌生,所以請耐心等待。我正在開發一個客戶端服務器應用程序(在C#中,.NET 4.0),我完全不理解一些事情。客戶端服務器(TCP)問題(時間)

我們假設TCP服務器和客戶端之間建立了連接。可以(沒有錯誤)你來自一個端點的基礎流,如果在另一端點還沒有被調用?

如果可以,您需要多少時間致電閱讀()並仍然獲取所有數據?在緩衝區中有多少數據可以存在,如果存在某種緩衝區,它會保留多長時間?如果你不叫讀了一段時間,如果你調試同時客戶端和服務器應用程序,可以在發生數據丟失(最新的,最古老的,...?)

還能有問題該連接似乎已關閉,因爲一個應用程序正在等待在調試模式下進行下一步?

謝謝你寶貴的時間和答案。

回答

1

假設TCP服務器和客戶端之間建立了連接。如果在另一個端點讀取沒有被調用,你可以(沒有錯誤)從一個端點寫入到基礎流中?

是的。 OS的套接字實現中每個套接字都有一個內部緩衝區。一切都將被存儲,直到該緩衝區已滿。

如果可以,您需要多少時間調用read()並仍然獲取所有數據?如果緩衝區中存在某種緩衝區,可以在緩衝區中存儲多少數據,以及它在那裏停留多長時間?如果你不叫讀了一段時間的數據丟失(最新的,最古老的,...?)

這一切都取決於另一端點多大緩衝區和頻率將數據發送給它。您可以使用Socket.ReceiveBufferSize進行調整。

還能有問題,如果你在同一時間調試客戶端和服務器應用程序,它可以發生連接,似乎要關閉,因爲一個應用程序正在等待做在調試模式下的下一步是什麼?

編號TCP連接始終打開,除非其中一個端點關閉它。請記住,如果使用異步IO並且不會中斷每個應用程序中的所有線程,則代碼的其他部分可以關閉連接。

+0

感謝您的回答。你也許知道緩衝區滿了會發生什麼?新數據丟失了?或者是緩衝區「轉移」並丟棄舊數據以騰出空間給新的。 – Ben 2011-04-28 09:48:31

+0

我還沒有找到任何有關這方面的信息(而且我從來不需要知道這一點)。如果您認爲它可能發生在您的應用程序中,那麼您有錯誤的應用程序體系結構。 – jgauffin 2011-04-28 10:04:24