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. 不知道在什么地方出现问题了; 如下是代码的缩减 ```go 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端来模拟服务器发出的报文, 暂时没有发现什么问题;

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

要回复问题请先登录注册