为什么我的 UDP 拨号器也没有监听?

我有两个程序,一个监听器和一个拨号器。我想要在同一个端口上进行双向 UDP 通信。我的监听器按预期读取从拨号器发送的数据报,然后发回自己的 5 个数据报。唯一的问题是,我的拨号器没有读取它。


我尝试使用 net.DialUDP 但当我使用它时,从拨号器发送了 0 个数据报。


听众 - 效果很好


func 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)

}


i := 0


b := make([]byte, 10)

conn.ReadFromUDP(b)

fmt.Println(string(b[:]))

for i < 5 {


    conn.WriteToUDP([]byte("sending back"), &addr)

    i++

}

}

发送数据报但无法读取它们的拨号程序


func main() {

sock, _ := net.Dial("udp", "127.0.0.1:7000")

buf := make([]byte, 100)


_, werr := sock.Write([]byte("first send"))

if werr != nil {

    fmt.Println(werr)

}

sock.Read(buf)


fmt.Println(string(buf[:]))

}

不发送任何数据报的拨号程序


func main() {


remote, _ := net.ResolveUDPAddr("udp", "127.0.0.1:7000")

sock, _ := net.DialUDP("udp", nil, remote)


buf := make([]byte, 10)


for {

    sock.WriteToUDP([]byte("first send"), remote)

    sock.ReadFromUDP(buf)

    fmt.Println(string(buf[:]))


}

}


MMTTMM
浏览 212回答 1
1回答

qq_笑_17

如有疑问,只需使用 ListenUDP。它将发送和接收数据报。sock,&nbsp;_&nbsp;:=&nbsp;net.Dial("udp",&nbsp;"127.0.0.1:7000")这将创建一个net.Conn,它只是一个基本的连接接口。您必须将其声明为 a*net.UDPConn才能使实际UDP方法起作用。sock,&nbsp;_&nbsp;:=&nbsp;net.DialUDP("udp",&nbsp;nil,&nbsp;remote)这将创建一个“已连接”的 UDP 套接字,并使用裸Write方法发送到单个远程地址。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go