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错误
讨论数量: 2
Junwind

有没有可能是服务端收到第一个消息后,处理完关闭了连接呢?

5个月前 评论
liuc000 (楼主) 5个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!