我正在开发客户端/服务器应用程序。
服务器有时会向所有连接的客户端发送一个字符串。
为此,我定义了一个数据包:
byte <- packet id
int <- 字符串的长度 byte[] <- 包含字符串的字节数组
现在我如何发送这个数据包:
byte[] buf = { ID };
buf = buf.Concat(BitConverter.GetBytes(StringData.Length)).ToArray();
buf = buf.Concat(Encoding.UTF8.GetBytes(StringData)).ToArray();
stream.Write(buf, 0, buf.Length);
有时字符串很小(大约 200 字节),但有时会稍大一些(>20k 字节)。通常较小的数据包在客户端读取它们时不会出现问题,但较大的数据包仅被客户端部分接收。
客户端的典型场景:
packet id -> 0x01
length -> 20000
string -> "this is an example stri"
我知道“这是一个示例字符串”不是 20000 字节长,但这只是一个示例。
在我的例子中,字符串是一个序列化的 JObject (Json.Net)。
在客户端,我像这样读取数据包:
byte[] buf = new byte[1];
stream.Read(buf, 0, buf.Length);
// Some packet id evaluation
buf = new byte[4];
stream.Read(buf, 0, buf.Length);
int length = BitConverter.ToInt32(buf, 0);
buf = new byte[length];
stream.Read(buf, 0, length);
string jsonString = Encoding.UTF8.GetString(buf, 0, length);
我真的不知道我做错了什么。
有什么建议可以在哪里查找错误或我在发送数据时做错了什么?
提前致谢!