网络协议
常见的:tcp ,udp,http ,ftp

无连接所以传输快,一般硬件传输都用udp
1 以下这俩都能用,服务端代码
pc, err := net.ListenPacket("udp", ":8080")
fmt.Printf("%T\n", pc)// 打印pc返回格式
//return
if err != nil {
panic(err)
}
defer pc.Close()//延迟关闭链接
for {
buf := make([]byte, 1024)//创建一个切片buf
_, addr, err := pc.ReadFrom(buf)//读取udp返回内容
//出现错误不执行go
if err != nil {
continue
}
go func() {
if err != nil {
log.Println("Failed to read from connection:", err)
}
log.Printf("Received data from %s: %s", addr.String(), string(buf))
if _, err := pc.WriteTo([]byte("Hello from server!"), addr); err != nil {
//打印内容
log.Println("Failed to write to connection:", err)
}
}()
}
return
2
PoolSizeUDP := 1472
listener, err := net.ListenUDP("udp", &net.UDPAddr{
IP: net.ParseIP("127.0.0.1"),
Port: 8080,
})
if err != nil {
return
}
// 如果还不行,考虑把系统的buffer设大一点
// listener.SetReadBuffer(1024 * 1024 * 8)
// listener.SetWriteBuffer(1024 * 1024 * 8)
var data = make([]byte, PoolSizeUDP)
//chLimit := make(chan int, 5) // 最多创建64个协程,避免内存爆炸
for {
n, _, err := listener.ReadFromUDP(data)
if err != nil {
continue
}
raw := make([]byte, n) // 重点注意,每次循环都必须创建新的raw变量,否则踩内存
copy(raw, data[:n])
//chLimit <- 1
go func(udpMsg []byte) {
// 拿 udpMsg 做点什么
fmt.Println(string(udpMsg))
}(raw)
}
客户端请求
func main() {
var data = "123"
var ip = "127.0.0.1"
var port = "8080"
r, _ := comm.SendUDPRequest([]byte(data), ip, port)
fmt.Println(string(r))
}
// SendUDPRequest
//
// @Description:发送UDP请求
// @param data
// @param ip
// @param port
// @return []byte
// @return error
func SendUDPRequest(data []byte, ip string, port string) ([]byte, error) {
if ip == "" {
ip = config.LhyEasyIP
}
if port == "" {
port = config.LampServ["port"]
}
client, err := net.Dial("udp", ip+":"+port)
if err != nil {
return nil, err
}
defer client.Close()
_, err = client.Write(data)
if err != nil {
return nil, err
}
buffer := make([]byte, 1024)
n, err := client.Read(buffer)
if err != nil {
return nil, err
}
return buffer[:n], nil
}
本文主要介绍了如何在服务端使用UDP协议进行数据收发,包括使用`net.ListenPacket`监听包,以及处理并发请求的方法。同时展示了客户端如何通过`SendUDPRequest`函数发送请求并接收响应。

被折叠的 条评论
为什么被折叠?



