在go语言中实现UDP客户端服务器读写实例
如何在Go语言中建立一个简单的客户-服务器UDP程序。这个UDP例子改编自之前的Golang中如何创建TCP客户端-服务器例子的教程。
下面是一个Golang中UDP服务器程序的例子。
该服务器将首先设置一个监听器,然后开始监听本地主机上的UDP客户端。
你可以根据你的配置来改变主机名和端口号。
udpserver.go:
package main
import (
"fmt"
"log"
"net"
)
func handleUDPConnection(conn *net.UDPConn) {
//这里是你想做的事情,比如读或写到客户端
buffer := make([]byte, 1024)
n, addr, err := conn.ReadFromUDP(buffer)
fmt.Println("UDP client : ", addr)
fmt.Println("从UDP客户端收到的信息 : ", string(buffer[:n]))
if err != nil {
log.Fatal(err)
}
// 注意:需要在WriteToUDP()函数中指定客户端地址。
// 否则,你将得到这个错误信息
//写udp:写:如果你使用Write()函数而不是WriteToUDP(),则需要目的地地址
//将信息写回给客户
message := []byte("Hello UDP client!")
_, err = conn.WriteToUDP(message, addr)
if err != nil {
log.Println(err)
}
}
func main() {
hostName := "localhost"
portNum := "6000"
service := hostName + ":" + portNum
udpAddr, err := net.ResolveUDPAddr("udp4", service)
if err != nil {
log.Fatal(err)
}
//为传入的UDP连接设置监听器
ln, err := net.ListenUDP("udp", udpAddr)
if err != nil {
log.Fatal(err)
}
fmt.Println("UDP服务器启动并在6000端口监听")
defer ln.Close()
for {
//等待UDP客户端的连接
handleUDPConnection(ln)
}
}
建立这个udpserver.go并在后台运行它。
./udpserver &
然后在另一台机器上运行客户端(如果可能的话)并连接到服务器上
udpclient.go:
package main
import (
"log"
"net"
"fmt"
)
func main() {
hostName := "localhost"
portNum := "6000"
service := hostName + ":" + portNum
RemoteAddr, err := net.ResolveUDPAddr("udp", service)
//LocalAddr := nil
// see https://golang.org/pkg/net/#DialUDP
conn, err := net.DialUDP("udp", nil, RemoteAddr)
// 注意:你也可以使用 net.ResolveUDPAddr 来处理 LocalAddr。
// 为了简化本教程,我们将只使用nil。
if err != nil {
log.Fatal(err)
}
log.Printf("已建立连接到 %s \n", service)
log.Printf("远程UDP地址 : %s \n", conn.RemoteAddr().String())
log.Printf("本地UDP客户端地址 : %s \n", conn.LocalAddr().String())
defer conn.Close()
//写信给服务器
message := []byte("Hello UDP server!")
_, err = conn.Write(message)
if err != nil {
log.Println(err)
}
//接收来自服务器的信息
buffer := make([]byte, 1024)
n, addr, err := conn.ReadFromUDP(buffer)
fmt.Println("UDP服务器 : ", addr)
fmt.Println("从UDP服务器收到 : ", string(buffer[:n]))
}
udpserver.go的输出样本:
UDP服务器已启动并在6000端口监听
UDP 客户端:127.0.0.1:63937
从UDP客户端收到的信息:Hello UDP server!
udpclient.go的输出样本:
2022/12/26 11:14:56 已建立连接到localhost:6000
2022/12/26 11:14:56 远程UDP地址 : 127.0.0.1:6000
2022/12/26 11:14:56 本地UDP客户端地址 : 127.0.0.1:63937
UDP服务器 : 127.0.0.1:6000
从UDP服务器收到 : Hello UDP client!
相关文章