zoukankan      html  css  js  c++  java
  • go语言中的invalid character 'x00' after top-level value

    设计的一个项目,需要从客户端中,发生一个结构体信息给服务端,服务端对接收到的信息进行验证。这里我考虑的是将结构体转换为json,然后传递至服务端,服务端解析json即可。

    由于json的数据格式就是[]byte,所以在网络传递中不需要转换,直接传递就可以了。对方接收到[]byte数据,也就是json数据,直接json解析就行了。

    然而,在服务端中解析时,显示invalid character 'x00' after top-level value。

    结构体代码:

    type Message struct {
    	Name string
    	Info string
    }

    先附上客户端和服务端代码。

    客户端:

    tcpAddr, _ := net.ResolveTCPAddr("tcp", "127.0.0.1:9999")
    conn, err := net.DialTCP("tcp", nil, tcpAddr)
    
    message.Name = "cloud"
    message.Info = "LIST"
    data, _ := json.Marshal(message)
    conn.Write(data)
    

      服务端代码:

    //读取一个客户端发送过来的数据
    data := make([]byte, 128)
    total, err := tcpConn.Read(data)
    var message Message
    err = json.Unmarshal(data, &message)
    if err != nil {
            fmt.Println(err)
    }
    

      fmt.println这里,就显示invalid character 'x00' after top-level value,经过分析,将

    err = json.Unmarshal(data, &message)
    

      改为

    err = json.Unmarshal(data[:total], &message)
    

      

    即可。原因在于,数据读取是有长度的,如果没有规定,默认会把最后一个字符删掉(我的猜测,目前我还不是很清楚,懂的大神请帮忙回答)
    还有一点,结构体的字段名称,必须首字母大写,我也搞不懂为什么是这个样子。

     
  • 相关阅读:
    设计模式外观模式
    SQL Server高级查询
    电脑双屏下如何设置程序在第二屏幕运行
    Vistual Studio自带的计划任务功能
    SQL Server定时创建动态表
    访问网站出现空白页面的原因和解决方法
    微软老将Philip Su的离职信:回首12年职场生涯的心得和随笔
    SQL Server更改字段名
    刷新本页与父页的两条代码
    色彩感情
  • 原文地址:https://www.cnblogs.com/CloudStrife/p/9164926.html
Copyright © 2011-2022 走看看