2010-04-19 81 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的作为他的临时存储读取之间: