我是套接字编程的新手。我正在开发服务器客户端应用程序。
而我正在使用异步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#嵌套异步方法
- 3. C#异步方法调用
- 4. 异步方法中的异步方法
- 5. 如何从非异步方法异步调用异步方法
- 6. 异步方法
- 7. 异步方法
- 8. 异步方法调用同步方法
- 9. 如何在不使用C#的异步方法中调用异步方法.Result
- 10. 异步和同步方法
- 11. 同步异步方法
- 12. 4种异步方法的回调C#
- 13. 不能在C#异步运行方法
- 14. 等待异步方法在c#调用
- 15. 使用c#5.0调用异步方法
- 16. SqlDataAdapter.Fill - 异步方法
- 17. 异步Thread.sleep()方法
- 18. 异步Web方法
- 19. Python异步方法
- 20. 转换异步方法,以非异步
- 21. 重写异步方法不增加异步到方法签名
- 22. 如何在C#中将异步方法与同步方法结合起来?
- 23. Obj-C同步使用块回调的异步方法
- 24. 使1方法异步以及在C#中同步
- 25. 将同步方法转换为与C#异步#
- 26. 在C中同步包装一个异步方法#
- 27. 序列化异步方法
- 28. Php上的异步方法
- 29. 异步方法挂在asp.net
- 30. 调用WCF方法异步
感谢您的答复。但我不知道如何通过套接字应用程序处理大量的数据传输。你能给我一些想法吗? – Jatin 2010-04-19 07:07:32
@Jatin:没有任何关于你之后对数据做什么的想法,很难知道该建议什么。例如,您可以在收到数据时将数据写入磁盘。 – 2010-04-19 07:14:19
没问题。感谢帮助。 – Jatin 2010-04-19 07:16:43