首页 新闻 会员 周边

客户端发给服务器的Json序列化对象在服务端反序列化之后有一半几率会多一个字符

0
悬赏园豆:5 [已解决问题] 解决于 2020-08-04 15:13

服务器接收代码

                    byte[] buffer = new byte[1024 * 1024 * 2]; 
                    int length = socket.Receive(buffer); 
                    if (length == 0)
                    {
                        break;
                    }
                    if (buffer[0] == 0)
                    {
                        string txt = Encoding.UTF8.GetString(buffer, 1, length-1);
                        
                    }

客户端发送代码


            byte[] buffer = Encoding.UTF8.GetBytes(txt);//txt为json序列化后的
            List<byte> list = new List<byte>();
            list.Add(0);
            list.AddRange(buffer);
            byte[] newBuffer = list.ToArray();

            socket.Send(newBuffer);

Exception

“Newtonsoft.Json.JsonReaderException”类型的未经处理的异常在 Newtonsoft.Json.dll 中发生 
Additional text encountered after finished reading JSON content: . Path '', line 1, position 177.
问题来了,在服务端解析的时候,json反序列化时,有时候在string txt = Encoding.UTF8.GetString(buffer, 1, length-1);后面多一个字符,这个字符像正方形的左上角

多出的字符字符类似于这个样

echo_lovely的主页 echo_lovely | 小虾三级 | 园豆:1356
提问于:2020-07-28 16:48
< >
分享
最佳答案
0
list.Add(0);

这里add的(byte)0 不就是你server收到后多出来的么.

收获园豆:5
czd890 | 专家六级 |园豆:14433 | 2020-07-28 18:36
 string txt = Encoding.UTF8.GetString(buffer, 1, length-1);

我这里接收的消息内容是从1开始,接收length-1个字符啊,本来接收到了length个字符去掉第一个,不就是length-1

echo_lovely | 园豆:1356 (小虾三级) | 2020-07-29 08:13

@小草上飞飞: tcp 沾包了吧,吧发的和收到的byte和length都打印一下

czd890 | 园豆:14433 (专家六级) | 2020-07-29 09:30

前4个字节可以是后面byte的length,读取4字节的长度后在根据长度读取后续的data

czd890 | 园豆:14433 (专家六级) | 2020-07-29 09:31
其他回答(1)
0

我在最后做了判断,接收解析到的字符串,最后一个若不是]},那么就不要]}后面的字符了。用Split做分割。

echo_lovely | 园豆:1356 (小虾三级) | 2020-08-04 15:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册