socket中进行Read的时候,在byte前面多出了 18个{0}

socket中进行Read的时候,在byte前面多出了 18个{0}

写了一个tcpserver, 与client保持长连接,server端不断读取conn中的数据;

但是在如下使用[]byte的时候,读取的时候会出现data前面出现 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 42 42 42 42]

42 42 42 42 是应用的数据为 "****"

每调用一次tcp.Read就会增加18个0. 不知道在什么地方出现问题了;

如下是代码的缩减

for {
        data := make([]byte, 512)
        total, err := tcp.Read(data)
        if err != nil {
            fmt.Println(string(data[:total]), err)
        }

        if total == 0  {                //读取到长度为0,表示客户端关闭;
            fmt.Println("Client Close, exist")
            break
        }

        nb := bytes.Count(data, []byte(" "))    // 如果为空包, 丢弃
        if nb == 0 {
            continue
        }
        Trace.Println("Orig:",total, data )
        Trace.Println("Orig:",total, string(data))

        s := make([]byte, 512)
        copy (s,data)

        n := bytes.Index(s, []byte{0}) //»•≥˝BYTES≥ı ºªØµƒ ±∫Ú0µƒ∂®“Â

        Trace.Println("sss", string(s[:n]), len(s[:n]), n)

        str1 := string(s[8:18])     // 怀疑是这里的问题,有18的出现;

        Trace.Println(str1)
        Trace.Println("total, nnnn, data", total, len(data), n, data)
        fmt.Println("total, nnnn", total, len(data), n)
        continue
}
已邀请:

astaxie - 创造、获取、分享、传播和应用Go

赞同来自: jjwsed

看上去是应用端传过来的数据

hanyun

赞同来自: jjwsed

你自己写一个client连上去,对比一下结果

jjwsed - 赵建军

赞同来自:

此前一直是调用服务器发出的报文, 服务器的报文是C写的tcpsnd;

也没有看出前面预留了空格,自己也写了一个client端来模拟服务器发出的报文, 暂时没有发现什么问题;

后续有进展的时候更新一下;

要回复问题请先登录注册