标签:main listen def srv 服务 list 返回 for 完成
package main
import (
"fmt"
"net"
"time"
)
func main() {
// 组织一个udp地址结构,指定服务器的ip+port
srvAddr, err := net.ResolveUDPAddr("udp","127.0.0.1:8000")
if err != nil {
fmt.Println("net.ResolveUDPAddr err:",err)
return
}
udpConn, err := net.ListenUDP("udp",srvAddr)
if err != nil {
fmt.Println("net.ListenUDP err:",err)
return
}
defer udpConn.Close()
fmt.Println("服务器通信sockct创建完成")
// 读取客户端的数据
buf := make([]byte, 4096)
// 返回3个值,读取到的字节数,客户端的地址,err
n, cltAddr, err := udpConn.ReadFromUDP(buf)
if err != nil {
fmt.Println("udpConn.ReadFromUDP err:",err)
return
}
fmt.Println("读到",cltAddr,string(buf[:n]))
// 回写数据给客户端
daytime := time.Now().String()
_, err = udpConn.WriteToUDP([]byte(daytime),cltAddr)
if err != nil {
fmt.Println("udpConn.WriteToUDP err:",err)
return
}
}
package main
import (
"fmt"
"net"
)
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()
conn.Write([]byte("hello"))
buf := make([]byte, 4096)
n, err := conn.Read(buf)
if err != nil {
fmt.Println("conn.Read err:",err)
return
}
fmt.Println("服务器回发:",string(buf[:n]))
}
package main
import (
"net"
"fmt"
"time"
)
func main() {
srvAddr, err := net.ResolveUDPAddr("udp","127.0.0.1:8000")
if err != nil {
fmt.Println("net.ResolveUDPAddr err:",err)
return
}
udpConn, err := net.ListenUDP("udp",srvAddr)
if err != nil {
fmt.Println("net.ListenUDP err:",err)
return
}
defer udpConn.Close()
fmt.Println("服务器通信sockct创建完成")
// 读取客户端的数据
buf := make([]byte, 4096)
for {
// 返回3个值,读取到的字节数,客户端的地址,err
n, cltAddr, err := udpConn.ReadFromUDP(buf) // --- 主go程读取客户端发送数据
if err != nil {
fmt.Println("udpConn.ReadFromUDP err:",err)
return
}
fmt.Println("读到",cltAddr,string(buf[:n]))
go func () {
// 提取系统当前时间
daytime := time.Now().String() + "\n"
// 回写数据给客户端
_, err = udpConn.WriteToUDP([]byte(daytime), cltAddr)
if err != nil {
fmt.Println("WriteToUDP err:", err)
return
}
}()
}
}
标签:main listen def srv 服务 list 返回 for 完成
原文地址:https://www.cnblogs.com/huyuan1004/p/11299226.html