怎么用Go语言实现UDP版聊天小工具

服务器   发布日期:2024年05月17日   浏览次数:1299

这篇文章主要介绍“怎么用Go语言实现UDP版聊天小工具”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么用Go语言实现UDP版聊天小工具”文章能帮助大家解决问题。

代码实现

server.go

  1. package main
  2. import (
  3. "bufio"
  4. "fmt"
  5. "io"
  6. "net"
  7. "os"
  8. "strings"
  9. )
  10. // 监听UDP协议进行通信
  11. func main() {
  12. // 建通udp端口, 传入协议名称与,UDPAddr类型的地址与端口
  13. listen, err := net.ListenUDP("udp", &net.UDPAddr{
  14. IP: net.IPv4(127, 0, 0, 1),
  15. Port: 10000,
  16. })
  17. if err != nil {
  18. fmt.Println("listen udp port failed err:", err)
  19. return
  20. }
  21. // 函数结束关闭连接
  22. defer listen.Close()
  23. // 发送与接受数据
  24. for {
  25. var baby [1024]byte
  26. reader := bufio.NewReader(os.Stdin)
  27. // 接受数据,传入切片类型对象,baby[:]表示切片类型吗,返回字节数与发送端地址与错误信息
  28. n, addr, err := listen.ReadFromUDP(baby[:])
  29. if err == io.EOF {
  30. fmt.Println("read ok, ", err)
  31. continue
  32. }
  33. if err != nil {
  34. fmt.Println("read data failed, err:", err)
  35. continue
  36. }
  37. fmt.Printf("Client:%v, remoteaddr:%v bytes:%v
  38. ", string(baby[:n]), addr, n)
  39. // 发送数据
  40. fmt.Print("Server:")
  41. // 对输入对内容进行格式输出,对特殊字符进行转义,传入的字节返回的字符串
  42. text, _ := reader.ReadString('
  43. ')
  44. // 去掉开头或结尾的空格
  45. msg := strings.TrimSpace(text)
  46. _, err = listen.WriteToUDP([]byte(msg), addr)
  47. if err != nil {
  48. fmt.Println("write to udp failed, err:", err)
  49. continue
  50. }
  51. }
  52. }

client.go

  1. package main
  2. import (
  3. "bufio"
  4. "fmt"
  5. "net"
  6. "os"
  7. "strings"
  8. )
  9. func main() {
  10. // 与远端udp进行通信, 传入协议名称与,UDPAddr类型的地址与端口
  11. listen, err := net.DialUDP("udp", nil, &net.UDPAddr{
  12. IP: net.IPv4(127, 0, 0, 1),
  13. Port: 10000,
  14. })
  15. if err != nil {
  16. fmt.Println("connection udp port failed,err:", err)
  17. return
  18. }
  19. // 函数结束关闭连接
  20. defer listen.Close()
  21. // 发送与接受数据
  22. var baby [1024]byte
  23. for {
  24. // 发送数据
  25. fmt.Print("Client:")
  26. reader := bufio.NewReader(os.Stdin)
  27. text, _ := reader.ReadString('
  28. ')
  29. // 去掉开头或结尾的空格
  30. msg := strings.TrimSpace(text)
  31. if msg == "exit" {
  32. return
  33. }
  34. _, err = listen.Write([]byte(msg))
  35. if err != nil {
  36. fmt.Println("发送数据失败,err:", err)
  37. return
  38. }
  39. // 接受数据
  40. n, desaddr, err := listen.ReadFromUDP(baby[:])
  41. if err != nil {
  42. fmt.Println("接收数据失败,err:", err)
  43. return
  44. }
  45. fmt.Printf("Server:%v remoteaddr:%v bytes:%v
  46. ", string(baby[:n]), desaddr, n)
  47. }
  48. }

运行效果

D:Softwaregodatasrc 115democlient>go run main.go
Client:你好
Server:滚 remoteaddr:127.0.0.1:10000 bytes:3
Client:好的
Server:..... remoteaddr:127.0.0.1:10000 bytes:5
Client:exit

以上就是怎么用Go语言实现UDP版聊天小工具的详细内容,更多关于怎么用Go语言实现UDP版聊天小工具的资料请关注九品源码其它相关文章!