首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法阅读UDP的回复(戈朗)

无法阅读UDP的回复(戈朗)
EN

Stack Overflow用户
提问于 2016-11-30 20:19:03
回答 1查看 2.2K关注 0票数 4

我正在编写一个Go程序,它发送一个UDP广播来查询本地网络上设备的存在,然后读取回复。使用Wireshark,我确认数据包是广播的,并且(我的)网络上的单个设备回答(实际上是十次),但是我的应用程序阻塞了读,就好像它没有看到传入的数据包一样。以下是代码:

代码语言:javascript
复制
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 )打印诊断,如果错误不是零,则退出。

答复中的信息如下:

代码语言:javascript
复制
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”,似乎没有什么区别。

欢迎对我做错了什么的任何建议!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-30 20:31:15

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

代码语言:javascript
复制
conn, err = net.ListenUDP("udp", ourAddr)

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

代码语言:javascript
复制
sendLen, err := conn.WriteToUDP(discoverMsg, serverAddr)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40897417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档