本文實(shí)例講述了golang實(shí)現(xiàn)簡(jiǎn)單的udp協(xié)議服務(wù)端與客戶端。分享給大家供大家參考,具體如下:
其實(shí)udp沒有什么服務(wù)端和客戶端的概念了,只是一個(gè)發(fā)一個(gè)收而已,只是這樣較方便能識(shí)別和理解.
服務(wù)端:
復(fù)制代碼 代碼如下:
package main
import (
"fmt"
"net"
)
func main() {
// 創(chuàng)建監(jiān)聽
socket, err := net.ListenUDP("udp4", net.UDPAddr{
IP: net.IPv4(0, 0, 0, 0),
Port: 8080,
})
if err != nil {
fmt.Println("監(jiān)聽失敗!", err)
return
}
defer socket.Close()
for {
// 讀取數(shù)據(jù)
data := make([]byte, 4096)
read, remoteAddr, err := socket.ReadFromUDP(data)
if err != nil {
fmt.Println("讀取數(shù)據(jù)失敗!", err)
continue
}
fmt.Println(read, remoteAddr)
fmt.Printf("%s\n\n", data)
// 發(fā)送數(shù)據(jù)
senddata := []byte("hello client!")
_, err = socket.WriteToUDP(senddata, remoteAddr)
if err != nil {
return
fmt.Println("發(fā)送數(shù)據(jù)失敗!", err)
}
}
}
客戶端:
復(fù)制代碼 代碼如下:
package main
import (
"fmt"
"net"
)
func main() {
// 創(chuàng)建連接
socket, err := net.DialUDP("udp4", nil, net.UDPAddr{
IP: net.IPv4(192, 168, 1, 103),
Port: 8080,
})
if err != nil {
fmt.Println("連接失敗!", err)
return
}
defer socket.Close()
// 發(fā)送數(shù)據(jù)
senddata := []byte("hello server!")
_, err = socket.Write(senddata)
if err != nil {
fmt.Println("發(fā)送數(shù)據(jù)失敗!", err)
return
}
// 接收數(shù)據(jù)
data := make([]byte, 4096)
read, remoteAddr, err := socket.ReadFromUDP(data)
if err != nil {
fmt.Println("讀取數(shù)據(jù)失敗!", err)
return
}
fmt.Println(read, remoteAddr)
fmt.Printf("%s\n", data)
}
希望本文所述對(duì)大家Go語(yǔ)言程序設(shè)計(jì)有所幫助。
您可能感興趣的文章:- Golang實(shí)現(xiàn)的聊天程序服務(wù)端和客戶端代碼分享
- 詳解golang consul-grpc 服務(wù)注冊(cè)與發(fā)現(xiàn)
- 詳解如何熱重啟golang服務(wù)器
- golang搭建靜態(tài)web服務(wù)器的實(shí)現(xiàn)方法
- golang websocket 服務(wù)端的實(shí)現(xiàn)
- 詳解prometheus監(jiān)控golang服務(wù)實(shí)踐記錄