我正在为服务器编写客户端,该客户端通常以 500 字节或更少字节的字符串形式发送数据。但是,数据偶尔会超过该值,对于所有客户端都知道的(在初始化或重大事件中),单个数据集可能包含 200,000 字节。但是,我不想让每个客户端都运行一个 50 MB 的套接字缓冲区(如果可能的话)。
每组数据都由一个空\0字符分隔。我应该考虑什么样的结构来存储部分发送的数据集?
例如,服务器可能会发送ABCDEFGHIJKLMNOPQRSTUV\0WXYZ\0123!\0. 我将要处理ABCDEFGHIJKLMNOPQRSTUV,WXYZ和123!独立。此外,服务器可以在ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890LOL123HAHATHISISREALLYLONG没有终止字符的情况下发送。我希望该数据集存储在某处以供以后追加和处理。
另外,如果重要的话,我正在使用异步套接字方法(BeginSend, EndSend, BeginReceive, EndReceive)。
目前我正在List<Byte>和之间进行辩论StringBuilder。在这种情况下对两者进行任何比较都会非常有帮助。
您可以只使用 aList<byte>作为缓冲区,因此 .NET 框架会根据需要自动扩展它。当您找到空终止符时,您可以使用List.RemoveRange()该消息从缓冲区中删除该消息并将其传递到上一层。
您可能想要添加一个检查,并在超过一定长度时抛出异常,而不是仅仅等到客户端耗尽内存。
(这与 Ben S 的答案非常相似,但我认为在面对编码问题时,字节数组比 StringBuilder 更强大。一旦你有了完整的消息,将字节解码为字符串最好在更高的位置完成。)
| 归档时间: |
|
| 查看次数: |
1155 次 |
| 最近记录: |