gpt4 book ai didi

C# 流套接字,如何分离消息?

转载 作者:行者123 更新时间:2023-11-30 21:26:15 25 4
gpt4 key购买 nike

有点长的标题,但无论如何......

我一直在看这些例子,特别是关于写入和读取字节流消息大小的部分
http://doc.trolltech.com/4.4/network-fortuneclient-client-cpp.html
http://doc.trolltech.com/4.4/network-fortuneserver-server-cpp.html

但我似乎无法在 C# 中弄明白。

StreamWriter writer = new StreamWriter(tcpClient.GetStream());
writer.Write(data.Length + data);

这根本不能很好地工作。有人能给我一个正确的方向吗?

最佳答案

通常您会先发送长度。两端应该就长度的样子达成一致——例如,您可能乐于使用固定的 4 字节长度前缀作为二进制:

  byte[] data = ...
int len = data.Length;
byte[] prefix = Bitconverter.GetBytes(len);
stream.Write(prefix, 0, prefix.Length); // fixed 4 bytes
stream.Write(data, 0, data.Length);

显然,调用者需要做同样的事情——即读取前 4 个字节以获得长度。对于读取,接收方应注意不要读取过多数据。一种方法是使用限制流 - 例如,this class可用于获取不会读取太多的 Stream。

如果您不希望总是发送 4 个字节的开销,那么一些更有趣的编码是可能的 - 例如,使用 msb 作为一个连续 block 。

有关信息,protobuf-net是一个二进制序列化程序,围绕谷歌的“ Protocol Buffer ”消息格式设计。它为您处理了很多细节,如果您不想花很多时间编写序列化代码,它可能会对您感兴趣。 QuickStart 项目中有套接字示例,for example here

关于C# 流套接字,如何分离消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/203930/

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