C#异步beginsend方法

时间:2010-04-19 06:58:02

标签: c# .net asynchronous

我是套接字编程的新手。我正在开发一个服务器客户端应用程序 我正在使用异步tcp ip socket。但现在我遇到了一个问题。在我的客户端,我通过beginReceive方法通过2kb字节数组接收数据。如果数据大小低于或等于2 kb,它可以正常工作,但当数据大小超过2kb范围时会出现问题。
请给我一些解决方案。

2 个答案:

答案 0 :(得分:1)

这是完全正常的 - 你不应该期望在一次调用中获得所有数据,无论你是使用同步还是异步调用,以及你是否有大量数据。

您应该继续阅读,直到读取呼叫表明没有更多数据 - 或者直到您获得所需的一切。如果您的协议在连接上需要多个请求/响应,则应该为每条消息设置长度前缀,以便另一方知道要读取多少内容,或者使用某种分隔符来指示消息的结束。长度前缀在适合时更容易,但它不容易支持流式传输 - 你必须以长度为前缀的“块”和最后一个块来表示你什么时候完成。

答案 1 :(得分:1)

我同意Jon的回答,因为你不应该在一次阅读中期望所有数据。

以下是一些帮助我解决此问题的博客: Aviad Ezra有一个关于异步套接字的优秀系列:

如果您决定使用长度为前缀的路径,此博客特别有用,作者使用MemoryStream作为读取之间的临时存储: