當(dāng)我運行此代碼時,傳入的 UDP 數(shù)據(jù)包被讀入,但沒有數(shù)據(jù)包被發(fā)回。為什么是這樣?(我用wireshark驗證了這個事實)。我希望能夠通過 UDP 連接以兩種方式進(jìn)行通信,我如何使用 golang 實現(xiàn)這一點?//Node 1func main() { addr := net.UDPAddr{ Port: 7000, IP: net.ParseIP("127.0.0.1"), } conn, err := net.ListenUDP("udp", &addr) defer conn.Close() if err != nil { panic(err) } for { b := make([]byte, 10) conn.Read(b) fmt.Println(string(b[:])) conn.Write([]byte("sending back")) }}func main() { sock, _ := net.Dial("udp", "127.0.0.1:7000") buf := make([]byte, 10) sock.Write([]byte("first send")) sock.Read(buf) fmt.Println(string(buf[:]))}
1 回答

白衣染霜花
TA貢獻(xiàn)1796條經(jīng)驗 獲得超10個贊
請記住,UDP 是無連接的。當(dāng)您調(diào)用 時conn.Write
,您的偵聽器不知道將數(shù)據(jù)包發(fā)送到何處。在您的服務(wù)器代碼中,您應(yīng)該使用UDPConn.ReadFromUDP
和UDPConn.WriteToUDP
來獲取和指定客戶端地址,如文檔中所述:
返回連接的 ReadFrom 和 WriteTo 方法可用于接收和發(fā)送具有按數(shù)據(jù)包尋址的 UDP 數(shù)據(jù)包。
您修改后的節(jié)點 1 循環(huán)可能如下所示:
for {
b := make([]byte, 10)
n, clientAddr, _ := conn.ReadFromUDP(b) // TODO: error check
fmt.Println(string(b[:n]))
conn.WriteToUDP([]byte("sending back"), clientAddr)
}
- 1 回答
- 0 關(guān)注
- 213 瀏覽
添加回答
舉報
0/150
提交
取消