1. 问题描述

(1)Send时将List数据通过Json序列化成string类型,并通过Socket发送。

string recipeInfo = JsonSerializer.Serialize>(wafer.RecipeInfo);

var recipeData = Encoding.UTF8.GetBytes(recipeInfo);

_acceptSocket.Send(recipeData);

(2)接收端Receive数据后,通过Json反序列化成List数据。

try

{

byte[] buffer = new byte[1024]; //Receive数据时要先指定读取字节长度

_tcpClient.Receive(buffer);

string msg = Encoding.UTF8.GetString(buffer);

List? list = JsonSerializer.Deserialize>(msg);

}

catch (Exception ex)

{

Log(ex.Message);

}

在反序列化的时候发生异常:

2. 问题分析

Socket将接收到的数据放到设定了1024字节大小的buffer中,buffer前有部分是有效的信息,后半段是空白\0符号。只有前半部分才可以反序列化成想要的结果,而整个操作的话就异常了。

3. 问题解决:

可以去除尾部0x00空白区域。

如果像上述字符编码的,则可以在接收到data并转换为string后,再直接加上:

msg = msg.TrimEnd('\0'); //将最后的0x00空白区域去掉

便可以反序列化成功。

文章链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。