Я работаю над программой Go, которая отправляет широковещательную рассылку UDP для запроса существования устройств в локальной сети, а затем читает ответы. Используя Wireshark, я подтверждаю, что пакет передается и что одно устройство на моей (моей) сети отвечает (фактически десять раз), но мое приложение блокирует чтение, как будто он не видит входящий пакет. Вот код:Не могу прочитать ответ 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) печатает диагностическое и выходит, если допустить ошибку не ноль, BTW.
информация в ответах выглядит следующим образом:
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