go实现UDP服务端以及客户端

「爱情、让人受尽委屈。」 2022-12-04 07:49 299阅读 0赞

UDP简介

UDP协议(User Datagram Protocol)中文名称是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联)参考模型中一种无连接的传输层协议,不需要建立连接就能直接进行数据发送和接收,属于不可靠的、没有时序的通信,但是UDP协议的实时性比较好,通常用于视频直播相关领域。

go实现

服务端实现:

  1. package main
  2. import (
  3. "fmt"
  4. "net"
  5. )
  6. func main() {
  7. listen, err := net.ListenUDP("udp", &net.UDPAddr{
  8. IP: net.IPv4(127, 0, 0, 1),
  9. Port: 30000,
  10. })
  11. if err != nil {
  12. fmt.Printf("listen failed,err:%v\n", err)
  13. return
  14. }
  15. defer listen.Close()
  16. for {
  17. var buf [1024]byte
  18. n, addr, err := listen.ReadFromUDP(buf[:])
  19. if err != nil {
  20. fmt.Printf("read udp failed,err:%v\n", err)
  21. return
  22. }
  23. fmt.Printf("接收到的数据:%v\n", string(buf[:n]))
  24. _, err = listen.WriteToUDP(buf[:n], addr)
  25. if err != nil {
  26. fmt.Printf("write to %v failed,err:%v\n", addr, err)
  27. return
  28. }
  29. }
  30. }

客户端实现:

  1. package main
  2. import (
  3. "bufio"
  4. "fmt"
  5. "net"
  6. "os"
  7. "strings"
  8. )
  9. //tcp client demo
  10. func main() {
  11. //1、与服务端建立连接
  12. conn, err := net.Dial("tcp", "127.0.0.1:20002")
  13. if err != nil {
  14. fmt.Printf("dial failed, err:%v\n", err)
  15. return
  16. }
  17. //2、利用该连接进行数据的发送和接收
  18. input := bufio.NewReader(os.Stdin)
  19. for {
  20. s, _ := input.ReadString('\n')
  21. s = strings.TrimSpace(s)
  22. if strings.ToUpper(s) == "Q" {
  23. return
  24. }
  25. //给服务端发消息
  26. _, err := conn.Write([]byte(s))
  27. if err != nil {
  28. fmt.Printf("send failed,err:%v\n", err)
  29. return
  30. }
  31. //从服务端接收回复的消息
  32. var buf [1024]byte
  33. n, err := conn.Read(buf[:])
  34. if err != nil {
  35. fmt.Printf("read failed,err:%v\n", err)
  36. return
  37. }
  38. fmt.Printf("收到服务端回复:%v\n", string(buf[:n]))
  39. }
  40. }

发表评论

表情:
评论列表 (有 0 条评论,299人围观)

还没有评论,来说两句吧...

相关阅读