Go语言网络通信---连续通信的UDP编程
Server:
package main
import (
"fmt"
"net"
)
func main() {
//创建udp地址
udpAddr, _ := net.ResolveUDPAddr("udp", "127.0.0.1:8080")
//服务端建立监听
serverConn, err := net.ListenUDP("udp", udpAddr)
if err == nil{
fmt.Println("正在8080端口监听。。。")
}else {
fmt.Println(err)
return
}
defer func() {
serverConn.Close()
fmt.Println("main over!")
}()
//与客户端IO
//建立1024字节缓冲区
buffer := make([]byte, 1024)
for {
/*
读取客户端消息到缓冲区
n = 读取到buffer中的字节数
remoteAddress = 数据包的来源地址
err = 超时等错误
*/
n, remoteAddress, _ := serverConn.ReadFromUDP(buffer)
//从buffer读取数据
contents := buffer[:n]
//打印读到的地址和数据
fmt.Printf("客户端:%v %v\n",remoteAddress,string(contents))
//回复本条消息
serverConn.WriteToUDP([]byte("孽障!"), remoteAddress)
}
}
Client:
package main
import (
"fmt"
"net"
)
func main() {
//使用udp协议拨号,远程地址127.0.0.1:8080
conn, _ := net.Dial("udp", "127.0.0.1:8080")
//程序退出前关闭连接,释放io资源
defer func() {
conn.Close()
fmt.Println("客户端已退出")
}()
//创建接收消息的缓冲区
buffer := make([]byte, 1024)
//用户要发送的消息文本
var userInput string
for{
//接收用户输入
fmt.Print("大神请输入:")
fmt.Scan(&userInput)
//如果用户输入exit则退出
if userInput == "exit"{
break
}
//客户端发起交谈
conn.Write([]byte(userInput))
//接收服务端消息
n, err := conn.Read(buffer)
fmt.Println(err)
fmt.Println("服务端:"+string(buffer[:n]))
}
}

浙公网安备 33010602011771号