2010-04-19 77 views
0

我是套接字編程的新手。我正在開發服務器客戶端應用程序。
而我正在使用異步tcp ip套接字。但是現在我面臨一個問題。在我的客戶端,我使用beginReceive方法通過2kb的字節數組接收數據。如果數據大小低於或等於2 kb,則其工作正常,但當數據大小超過2kb範圍時會出現問題。
請給我一些解決方案。C#異步beginsend方法

回答

1

這是完全正常的 - 您不應期望在一次調用中獲取所有數據,無論您是使用同步還是異步調用,以及您是否擁有大量數據或少量數據。

您應該繼續閱讀,直到閱讀調用表明沒有更多數據 - 或者直到您獲得了所需的所有內容。如果你的協議在一個連接上需要多個請求/響應,你應該對每個消息進行長度前綴,以便另一方知道要讀多少,或者有某種分隔符來表示消息的結束。長度前綴在合適時更容易,但不容易支持串流 - 您必須以長度爲前綴的「塊」和最後一個塊來指示完成時間。

+0

感謝您的答覆。但我不知道如何通過套接字應用程序處理大量的數據傳輸。你能給我一些想法嗎? – Jatin 2010-04-19 07:07:32

+0

@Jatin:沒有任何關於你之後對數據做什麼的想法,很難知道該建議什麼。例如,您可以在收到數據時將數據寫入磁盤。 – 2010-04-19 07:14:19

+0

沒問題。感謝幫助。 – Jatin 2010-04-19 07:16:43

1

我同意喬恩的回答,關於你不應該期待你讀完所有數據的事實。

這裏有一些博客已經幫我在過去的這個問題: 阿維亞德以斯拉對異步套接字一個優秀的系列:

如果您決定使用長度前綴路線,作者使用此博客特別有用是個MemoryStream的作爲他的臨時存儲讀取之間: