读取异步tcp消息C#的最佳方法是什么?

时间:2012-07-10 12:35:29

标签: file asynchronous tcp

我有一个文件传输应用程序(大文件),我想让它可以扩展。我使用异步回调来读取16Kb块中的消息。每当我收到一条消息时,我都会将它发送给一个将其“解密”并处理它的类。使用的格式很简单:(int)Command->(int)MsgLen->(String)Msg。

这只是一个例子。我遇到的问题是,如果我想进行多次读取,处理此问题的最佳方法是什么?如果1次读取中有多个命令会发生什么?例如,我接近结束,我只有2个字节的命令,而不是完整的4?

我想到了一个队列但是提取字节并转换它们很痛苦。有更好的选择吗?

1 个答案:

答案 0 :(得分:1)

最简单的方法是保留所有未完成数据的byte[]数组(或类似数据结构)。当新数据到达时,始终附加到该数组,然后仅删除完全接收的消息。

您唯一需要担心的是,如果您在处理另一条消息时收到消息,那么您需要锁定byte[]阵列上的操作。

有更多“聪明”的方法可以解决这个问题,但在大多数情况下,最简单的方法是最好的。