go连接Tcp问题
使用Go当客户端连接Tcp服务器出现的问题
1. 运行环境
go version go1.22.5 windows/386
2. 问题描述?
Server, err := net.Dial("tcp", serverAddr)
if err != nil {
fmt.Println("连接失败:", err)
return
}
defer Server.Close()
//这段代码用来连续发送三条消息到tcp服务器
go func() {
a,_:=hex.DecodeString("4453840000101200030000008...")
Server.Write(a)
b, _ := hex.DecodeString("445300000710120000000000")
Server.Write(b)
c, _ := hex.DecodeString("4453080008101200000000000000000000000000")
Server.Write(c)
}()
quit := make(chan string, 1) // 1. 创建长度为1的通道(chan)
// 读取协程
go func() {
buf := make([]byte, 2048)
for {
n, err := Server.Read(buf)
fmt.Println(n)
if err != nil {
if err == io.EOF {
fmt.Println("eof错误")
return
}
panic(err)
}
if n == 8 {
quit <- "888"
}
fmt.Println("读取到的数据", hex.EncodeToString(buf[:n]))
}
}()
r := <-quit // 2. 尝试从通道中读取内容,若通道为空,则阻塞在此
fmt.Printf("command: %v", r)
3. 您期望得到的结果?
第一次使用Server.Write(a)
返回的结果是正确的, 但是第二次进行读取的时候走到了eof错误
4. 您实际得到的结果?
go run .\main.go
16
读取到的数据 4453040000101400ffffffff00000000
0
eof错误
有没有可能是服务端收到第一个消息后,处理完关闭了连接呢?