golang UDP服务器的奇怪行为

我在 go 中编写了一个简单的 UDP 服务器。


当我这样做时,go run udp.go它会打印我发送给它的所有包裹。但是在运行时,go run udp.go > out它会在客户端停止时停止传递stdout给out文件。


客户端是发送 10k 请求的简单程序。所以在文件中我有大约 50% 的已发送包裹。当我再次运行客户端时,out文件再次增长,直到客户端脚本完成。


服务器代码:


package main


import (

  "net"


  "fmt"

)


func main() {

  addr, _ := net.ResolveUDPAddr("udp", ":2000")

  sock, _ := net.ListenUDP("udp", addr)


  i := 0

  for {

    i++

    buf := make([]byte, 1024)

    rlen, _, err := sock.ReadFromUDP(buf)

    if err != nil {

      fmt.Println(err)

    }

    fmt.Println(string(buf[0:rlen]))

    fmt.Println(i)

    //go handlePacket(buf, rlen)

  }

}

这是客户端代码:


package main


import (

  "net"


  "fmt"

)


func main() {


  num := 0

  for i := 0; i < 100; i++ {

    for j := 0; j < 100; j++ {

      num++

      con, _ := net.Dial("udp", "127.0.0.1:2000")

      fmt.Println(num)

      buf := []byte("bla bla bla I am the packet")

      _, err := con.Write(buf)

      if err != nil {

        fmt.Println(err)

      }

    }

  }

}


森林海
浏览 233回答 2
2回答

牛魔王的故事

尝试在写语句后同步标准输出。os.Stdout.Sync()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go