2016-11-30 12 views
1

私はローカルネットワーク上のデバイスの存在を照会する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 "と何も違いはありません。

私が間違っていることについてのご意見は歓迎です!

答えて

1

DialUDPの代わりにListenUDPを使用する必要があります。 DialUDPを使用すると、「接続された」UDPポートが作成され、リモートアドレスから発信されたパケットだけが読み取り時に返されます。

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

接続はデフォルトの宛先を持っていないので、あなたはまた、パケットを送信するためにWriteTo*メソッドを使用する必要があります。

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

これらの変更は動作します。私はそれに応じてそれをマークしました。 編集:元の投稿で編集した内容が不思議です。私は何の変化も見ることができません。 – HankB

+0

@ HankB:diff(https://stackoverflow.com/posts/40897417/revisions)を見て、コードを適切に表示するように書式を設定しました。 – JimB

+0

私は問題に集中していましたので、私は気まぐれな書式に気づいていませんでした。 ;) – HankB

関連する問題