私はローカルネットワーク上のデバイスの存在を照会するUDPブロードキャストを送信し、次に応答を読み込むGoプログラムに取り組んでいます。 Wiresharkの使用私は、パケットがブロードキャストであり、(私の)ネットワーク上の単一のデバイスが(実際には10回)応答するが、受信パケットが見えないかのように私のアプリケーションが読み取りをブロックすることを確認する。以下はコードです:UDP応答(golang)を読み取ることができません
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がnilでなければ終了します。
回答に記載されている情報は次のようになります。私は試してみました
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 "と何も違いはありません。
私が間違っていることについてのご意見は歓迎です!
これらの変更は動作します。私はそれに応じてそれをマークしました。 編集:元の投稿で編集した内容が不思議です。私は何の変化も見ることができません。 – HankB
@ HankB:diff(https://stackoverflow.com/posts/40897417/revisions)を見て、コードを適切に表示するように書式を設定しました。 – JimB
私は問題に集中していましたので、私は気まぐれな書式に気づいていませんでした。 ;) – HankB