package main
import (
"fmt"
"net"
)
func main() {
msg := make([]byte, 1024)
//Basic variables
port := ":2002"
protocol := "udp"
//Build the address
myaddr, err := net.ResolveUDPAddr(protocol, port)
if err != nil {
fmt.Println("Wrong Address")
return
}
//Output
fmt.Println("Reading " + protocol + " from " + myaddr.String())
//Create the connection
connection, err := net.ListenUDP(protocol, myaddr)
if err != nil {
fmt.Println(err)
}
//receive msg
for {
_, useraddr, err := connection.ReadFromUDP(msg)
fmt.Println("msg from :", useraddr)
if err != nil {
fmt.Printf("Some error %v", err)
continue
}
go sendResponse(connection, useraddr)
}
}
这是我的UDP服务器,我正在制作游戏。所以我想,如果客户端发送"让我们播放",服务器运行go sendresponse
功能。如果它不是"让我们玩#34;它不会运行。
我想我应该比较msg
,但我不知道如何。谢谢:))
答案 0 :(得分:2)
也许,这样的事情:
//receive msg
msg := make([]byte, 1024)
for {
n, useraddr, err := connection.ReadFromUDP(msg[:cap(msg)])
msg = msg[:n]
fmt.Println("msg from :", useraddr)
if err != nil {
fmt.Printf("Some error %v", err)
continue
}
if string(msg) == "let's play" {
go sendResponse(connection, useraddr)
}
}
表达式msg[:cap(msg)]
将msg
缓冲区长度设置为其最大容量。
语句msg = msg[:n]
将msg
缓冲区长度设置为读取的实际长度。
string(msg)
表达式会将msg
类型[]byte
转换为string
类型以进行比较。