无法读取UDP回复(golang)

我正在开发一个Go程序,该程序发出UDP广播以查询本地网络上设备的存在,然后读取答复。使用Wireshark,我确认该数据包已广播,并且(我)网络上的单个设备已答复(实际上是10次),但我的应用程序在读取时被阻止,好像它看不到传入的数据包。这是代码:

func Discover(timeout int) ([]string, error) {

inBuf := make([]byte, 1024)

devices := make([]string, 0)

var readLen int

var fromAddr *net.UDPAddr

// get server connection

server := fmt.Sprintf("%s:%d", bcastIP, udpDiscoverPort) // "255.255.255.255", 10000

serverAddr, err = net.ResolveUDPAddr("udp", server)

checkErr(err)

ourAddr, err = net.ResolveUDPAddr("udp", "192.168.1.132:10000")

checkErr(err)

conn, err = net.DialUDP("udp", ourAddr, serverAddr)

checkErr(err)

defer conn.Close()

// send the Discover message

discoverMsg := []byte(magic)

discoverMsg = append(discoverMsg, discovery...)

sendLen, err := conn.Write(discoverMsg)

checkErr(err)

fmt.Println("Sent", sendLen, "bytes")

// read one reply

readLen, fromAddr, err = conn.ReadFromUDP(inBuf)

fmt.Println("Read ", readLen, "bytesfrom ", fromAddr)

txtutil.Dump(string(inBuf[:readLen]))

return devices, nil

}

checkErr(err)打印诊断信息,如果err不为零,则退出。

答复中的信息如下:

Internet Protocol Version 4, Src: 192.168.1.126 (192.168.1.126), Dst: 192.168.1.132 (192.168.1.132)

User Datagram Protocol, Src Port: ndmp (10000), Dst Port: ndmp (10000)

我尝试用“ 0.0.0.0:10000”、“:10000”和“ 127.0.0.1:10000”代替“

192.168.1.132:10000”,但似乎没有任何区别。

任何关于我做错事情的建议都欢迎!

回答:

您需要使用ListenUDP而不是DialUDP。当您使用时DialUDP,它将创建一个“已连接”的UDP端口,并且仅在读取时返回源自远程地址的数据包。

conn, err = net.ListenUDP("udp", ourAddr)

由于连接没有默认目的地,因此您还需要使用WriteTo*方法发送数据包:

sendLen, err := conn.WriteToUDP(discoverMsg, serverAddr)

以上是 无法读取UDP回复(golang) 的全部内容, 来源链接: utcz.com/qa/408999.html

回到顶部