Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

可以看到,gudp.Conngtcp.Conn的方法非常类似,并且也支持简单协议的消息包方法。

基本介绍

gudp.Conn的操作绝大部分类似于gtcp的操作方式(大部分的方法名称也相同),但由于UDP是面向非连接的协议,因此gudp.Conn(底层通信端口)也只能完成最多一次数据写入和读取,客户端下一次再与目标服务端进行通信的时候,将需要创建新的Conn对象进行通信。

使用示例

package main

import (
	"fmt"
	"github.com/gogf/gf/frame/g"
	"github.com/gogf/gf/net/gudp"
	"github.com/gogf/gf/os/gtime"
	"time"
)

func main() {
	// Server
	go gudp.NewServer("127.0.0.1:8999", func(conn *gudp.Conn) {
		defer conn.Close()
		for {
			data, err := conn.Recv(-1)
			if len(data) > 0 {
				if err := conn.Send(append([]byte("> "), data...)); err != nil {
					g.Log().Error(err)
				}
			}
			if err != nil {
				g.Log().Error(err)
			}
		}
	}).Run()

	time.Sleep(time.Second)

	// Client
	for {
		if conn, err := gudp.NewConn("127.0.0.1:8999"); err == nil {
			if b, err := conn.SendRecv([]byte(gtime.Datetime()), -1); err == nil {
				fmt.Println(string(b), conn.LocalAddr(), conn.RemoteAddr())
			} else {
				g.Log().Error(err)
			}
			conn.Close()
		} else {
			g.Log().Error(err)
		}
		time.Sleep(time.Second)
	}
}

...