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

2020-08-04 15:01发布

问题:

服务器接收代码

                    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);后面多一个字符,这个字符像正方形的左上角

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

回答1:

list.Add(0);

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



回答2:

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