gpt4 book ai didi

sockets - golang net.UDPConn 和 net.TCPConn 线程安全吗??我可以在多线程中读取或写入单个 UDPConn 对象吗?

转载 作者:IT王子 更新时间:2023-10-29 00:48:38 28 4
gpt4 key购买 nike

1.我们能否在同一个 net.UDPConn 或 net.TCPConn 对象上从一个线程调用发送并从另一个线程调用接收?

2.我们能否从同一 net.UDPConn 或 net.TCPConn 对象上的不同线程并行调用多个发送?

我也找不到同样好的文档。golang socket api线程安全吗?

我发现很难测试它是否是线程安全的。方向上的任何指示都会有所帮助。

我的测试代码如下:

package main

import (
"fmt"
"net"
"sync"
)

func udp_server() {
// create listen
conn, err := net.ListenUDP("udp", &net.UDPAddr{
IP: net.IPv4(0, 0, 0, 0),
Port: 8080,
})
if err != nil {
fmt.Println("listen fail", err)
return
}
defer conn.Close()

var wg sync.WaitGroup
for i := 0; i < 10; i = i + 1 {
wg.Add(1)
go func(socket *net.UDPConn) {
defer wg.Done()
for {
// read data
data := make([]byte, 4096)
read, remoteAddr, err := socket.ReadFromUDP(data)
if err != nil {
fmt.Println("read data fail!", err)
continue
}
fmt.Println(read, remoteAddr)
fmt.Printf("%s\n\n", data)

// send data
senddata := []byte("hello client!")
_, err = socket.WriteToUDP(senddata, remoteAddr)
if err != nil {
return
fmt.Println("send data fail!", err)
}
}
}(conn)
}
wg.Wait()
}

func main() {
udp_server()
}

这个测试代码可以吗?

最佳答案

net.Conn 的文档说:

Multiple goroutines may invoke methods on a Conn simultaneously.

关于sockets - golang net.UDPConn 和 net.TCPConn 线程安全吗??我可以在多线程中读取或写入单个 UDPConn 对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28575758/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com