我是套接字編程的新手。我正在開發服務器客戶端應用程序。
而我正在使用異步tcp ip套接字。但是現在我面臨一個問題。在我的客戶端,我使用beginReceive方法通過2kb的字節數組接收數據。如果數據大小低於或等於2 kb,則其工作正常,但當數據大小超過2kb範圍時會出現問題。
請給我一些解決方案。C#異步beginsend方法
0
A
回答
1
這是完全正常的 - 您不應期望在一次調用中獲取所有數據,無論您是使用同步還是異步調用,以及您是否擁有大量數據或少量數據。
您應該繼續閱讀,直到閱讀調用表明沒有更多數據 - 或者直到您獲得了所需的所有內容。如果你的協議在一個連接上需要多個請求/響應,你應該對每個消息進行長度前綴,以便另一方知道要讀多少,或者有某種分隔符來表示消息的結束。長度前綴在合適時更容易,但不容易支持串流 - 您必須以長度爲前綴的「塊」和最後一個塊來指示完成時間。
1
我同意喬恩的回答,關於你不應該期待你讀完所有數據的事實。
這裏有一些博客已經幫我在過去的這個問題: 阿維亞德以斯拉對異步套接字一個優秀的系列:
- .NET Sockets - Two Way - Single Client
- .NET Sockets in Two Directions with Multiple Client Support
- Sending Typed (Serialized) Messages over .NET Sockets
如果您決定使用長度前綴路線,作者使用此博客特別有用是個MemoryStream的作爲他的臨時存儲讀取之間:
相關問題
- 1. C#異步套接字BeginSend
- 2. C#異步套接字BeginSend EndReceive
- 3. C#異步方法調用
- 4. C#嵌套異步方法
- 5. C#中的異步方法
- 6. 套接字同步發送優於異步beginsend/endsend?
- 7. 異步方法中的異步方法
- 8. 如何從非異步方法異步調用異步方法
- 9. 異步方法
- 10. 異步方法?
- 11. 異步方法
- 12. C#異步方法的用法
- 13. 異步方法調用同步方法
- 14. 如何在不使用C#的異步方法中調用異步方法.Result
- 15. 同步異步方法
- 16. 異步和同步方法
- 17. C#異步/等待 - 限制異步方法調用/鎖定
- 18. 在C中異步調用方法#
- 19. 異步方法在C#:延續點
- 20. C#異步方法未運行模式
- 21. Objective-C異步方法和ARC
- 22. 4種異步方法的回調C#
- 23. C#異步方法調用一路主
- 24. 如何讓C#方法異步
- 25. C#5異步方法完成事件。
- 26. C#異步方法仍然掛起UI
- 27. c#異步方法和返回等待
- 28. 使用c#5.0調用異步方法
- 29. 等待異步方法在c#調用
- 30. 不能在C#異步運行方法
感謝您的答覆。但我不知道如何通過套接字應用程序處理大量的數據傳輸。你能給我一些想法嗎? – Jatin 2010-04-19 07:07:32
@Jatin:沒有任何關於你之後對數據做什麼的想法,很難知道該建議什麼。例如,您可以在收到數據時將數據寫入磁盤。 – 2010-04-19 07:14:19
沒問題。感謝幫助。 – Jatin 2010-04-19 07:16:43