使用Go语言实现UDP互相通信可以通过以下步骤实现:
导入net包,该包提供了UDP通信所需的函数和结构体。
创建本地UDP监听,使用net.ListenUDP()函数创建一个本地UDP监听,该函数需要指定本地IP地址和端口号。
创建远程UDP地址,使用net.ResolveUDPAddr()函数创建一个远程UDP地址,该函数需要指定远程IP地址和端口号。
启动接收协程,使用go关键字启动一个接收协程,该协程会一直阻塞在UDP连接的ReadFromUDP()函数上,等待接收数据。
发送数据,使用UDP连接的WriteToUDP()函数向远程主机发送数据,该函数需要传入一个字节数组作为数据和远程UDP地址。
关闭连接,使用UDP连接的Close()函数关闭连接。
下面是一个简单的示例代码:
package main
import (
"fmt"
"net"
)
func main() {
// 创建本地UDP监听
localAddr, _ := net.ResolveUDPAddr("udp", "127.0.0.1:8080")
conn, _ := net.ListenUDP("udp", localAddr)
defer conn.Close()
// 创建远程UDP地址
remoteAddr, _ := net.ResolveUDPAddr("udp", "127.0.0.1:8081")
// 启动接收协程
go func() {
buffer := make([]byte, 1024)
for {
n, addr, _ := conn.ReadFromUDP(buffer)
fmt.Printf("Received from %v: %s\n", addr, string(buffer[:n]))
}
}()
// 发送数据
data := []byte("Hello, UDP!")
conn.WriteToUDP(data, remoteAddr)
// 等待接收协程结束
select {}
}
在上面的示例中,我们创建了一个本地IP地址为127.0.0.1、端口号为8080的UDP监听,并创建了一个远程IP地址为127.0.0.1、端口号为8081的UDP地址。然后我们启动了一个接收协程,该协程会一直阻塞在UDP连接的ReadFromUDP()函数上,等待接收数据。接着我们向远程主机发送了一条数据,并等待接收协程结束。当接收协程接收到数据时,会打印出接收到的数据和发送方的地址。