2014-11-27 15 views
7

Sto provando a creare una strada a doppio senso tra due computer usando UDP come protocollo. Forse non sto capendo il punto di net.ListenUDP. Non dovrebbe essere una chiamata bloccante? In attesa che un client si connetta?UDP in golang, non ascoltare una chiamata bloccante?

addr := net.UDPAddr{ 
    Port: 2000, 
    IP: net.ParseIP("127.0.0.1"), 
} 
conn, err := net.ListenUDP("udp", &addr) 
// code does not block here 
defer conn.Close() 
if err != nil { 
    panic(err) 
} 

var testPayload []byte = []byte("This is a test") 

conn.Write(testPayload) 
+0

UDP è senza connessione, quindi il blocco su ListenUDP non avrebbe senso – Arjan

risposta

6

Non si blocca perché viene eseguito in background. Hai appena letto dalla connessione.

addr := net.UDPAddr{ 
    Port: 2000, 
    IP: net.ParseIP("127.0.0.1"), 
} 
conn, err := net.ListenUDP("udp", &addr) 
// code does not block here 
defer ln.Close() 
if err != nil { 
    panic(err) 
} 

var buf [1024]byte 
for { 
    rlen, remote, err := conn.ReadFromUDP(buf[:]) 
    // Do stuff with the read bytes 
} 


var testPayload []byte = []byte("This is a test") 

conn.Write(testPayload) 

Risposta this risposta. Ha un esempio funzionante di connessioni UDP in go e alcuni suggerimenti per farlo funzionare un po 'meglio.

+2

è possibile rinviare dopo il controllo degli errori? –