1.客户端代码
package main
import (
"net"
"os"
"fmt"
)
func main() {
conn, err := net.Dial("udp", "127.0.0.1:8000")
if err != nil {
fmt.Println("net.Dial err:", err)
return
}
defer conn.Close()
go func() {
str := make([]byte, 1024)
for {
n, err := os.Stdin.Read(str) //从键盘读取内容, 放在str
if err != nil {
fmt.Println("os.Stdin. err1 = ", err)
return
}
conn.Write(str[:n]) // 给服务器发送
}
}()
buf := make([]byte, 1024)
for {
n, err := conn.Read(buf)
if err != nil {
fmt.Println("conn.Read err:", err)
return
}
fmt.Println("服务器传达 : ", string(buf[:n]))
}
}
2.服务端代码
package main
import (
"net"
"fmt"
"time"
)
func main() {
// 创建 服务器 UDP 地址结构。指定 IP + port
laddr, err := net.ResolveUDPAddr("udp", ":8000")
if err != nil {
fmt.Println("ResolveUDPAddr err:", err)
return
}
// 监听 客户端连接
conn, err := net.ListenUDP("udp", laddr)
if err != nil {
fmt.Println("net.ListenUDP err:", err)
return
}
defer conn.Close()
for {
recvUDPMsg(conn)
}
}
//UDP接受操作
func recvUDPMsg(conn *net.UDPConn){
buf := make([]byte, 1024)
n, raddr, err := conn.ReadFromUDP(buf)
if err != nil {
fmt.Println("conn.ReadFromUDP err:", err)
return
}
now := time.Now().Format("2006/1/2 15:04:05")
fmt.Printf("%s-接收到客户端[%s]:%s", now, raddr, string(buf[:n]))
conn.WriteToUDP([]byte("Server receive at " + now), raddr) // 简单回写数据给客户端
}
通过go build 编译生成exe执行文件 如下图操作
客户端随便输入点文字然后点击回车, 然后服务端自动将消息当时的时间返回给客户端