gpt4 book ai didi

c# - 我应该如何处理不完整的数据包缓冲区?

转载 作者:太空狗 更新时间:2023-10-30 00:46:44 25 4
gpt4 key购买 nike

我正在为通常以 500 或更少字节的字符串形式发送数据的服务器编写客户端。然而,数据有时会超过这个数量,并且一组数据可能包含 200,000 字节,就客户端所知(在初始化或重要事件时)。但是,我不想让每个客户端都使用 50 MB 套接字缓冲区运行(如果可能的话)。

每组数据由空 \0 字符分隔。我应该看什么样的结构来存储部分发送的数据集?

例如,服务器可能会发送 ABCDEFGHIJKLMNOPQRSTUV\0WXYZ\0123!\0 。我想独立处理 ABCDEFGHIJKLMNOPQRSTUVWXYZ123! 。此外,服务器可以发送没有终止符的 ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890LOL123HAHATHISISREALLYLONG。我希望将该数据集存储在某个地方以供以后追加和处理。

此外,如果重要的话,我正在使用异步套接字方法( BeginSendEndSendBeginReceiveEndReceive )。

目前我在 List<Byte>StringBuilder 之间争论不休。对于这种情况,对两者进行任何比较都会非常有帮助。

最佳答案

将套接字中的数据读入缓冲区。当您获得终止字符时,将其转换为一条消息并将其发送到您的其余代码。

此外,请记住 TCP 是一个,而不是一个数据包。因此,您永远不应该假设您会在一次读取中同时收到所有内容。

就缓冲区而言,每个连接最多可能只需要一个。我可能会从您合理期望接收的最大大小开始,如果满了,创建一个更大大小的新缓冲区——一个典型的策略是当您用完时将大小加倍避免搅动过多的分配。

如果您有多个传入连接,您可能想做一些事情,比如创建一个缓冲区池,并在完成后将“大”的连接返回到池中。

关于c# - 我应该如何处理不完整的数据包缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2444519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com