为了账号安全,请及时绑定邮箱和手机立即绑定

Golang编写的UDP-Client无法接收到来自服务器的消息

Golang编写的UDP-Client无法接收到来自服务器的消息

Go
一只萌萌小番薯 2021-12-20 14:45:31
我写了一个Java Client,它向广播地址发送消息。我还编写了一个 Java Server,它接受所有发送的消息并将消息发送回客户端。现在我想尝试在 Go 中做完全相同的事情,只是为了获得一些经验。服务器工作正常,正在接收消息并响应 Java 客户端。但是我的 Go Client 只向 Go/Java 服务器发送消息,但没有收到任何消息。根据wireshark的说法,消息被发送回正确的IP和端口,但显然该端口无法访问。我的代码如下:转到服务器:package mainimport (    "fmt"    "log"    "net")func main() {    //Resolving address    udpAddr, err := net.ResolveUDPAddr("udp4", "0.0.0.0:8888")    if err != nil {        log.Println("Error: ", err)    }    // Build listining connections    conn, err := net.ListenUDP("udp", udpAddr)    defer conn.Close()    if err != nil {        log.Println("Error: ", err)    }    // Interacting with one client at a time    for {        fmt.Println(">>>Ready to receive broadcast packets!")        // Receiving a message        recvBuff := make([]byte, 15000)        _, rmAddr, err := conn.ReadFromUDP(recvBuff)        if err != nil {            panic(err)        }        fmt.Println(">>>Discovery packet received from: " + rmAddr.String())        fmt.Println(">>>Packet received; data: " + string(recvBuff))        // Sending the same message back to current client        conn.WriteToUDP(recvBuff, rmAddr)        fmt.Println(">>>Sent packet to: " + rmAddr.String())} }
查看完整描述

2 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

即使您只打算从连接发送 UDP 数据包,您通常也希望ListenUDP使用ReadFromUDPWriteToUDP方法来创建连接。

当您使用 时DialUDP,它会创建一个“连接的”UDP 套接字,带有一个隐式远程端点,它将过滤传入的数据包。从 Linuxconnect手册页:

如果套接字 sockfd 是 SOCK_DGRAM 类型,则 addr 是默认发送数据报的地址,也是接收数据报的唯一地址。


查看完整回答
反对 回复 2021-12-20
?
largeQ

TA贡献2039条经验 获得超8个赞

如果您不忽略从 WriteToUDP 返回的错误,它实际上会给您一个错误:“sendto: message to long”

在 OSX 上,最大 UDP 数据报大小默认设置为 9216 字节。您尝试发送 15000 个字节。

如果你只是想写回你收到的东西,那么写

recvBuff[:n]

,其中 n 是之前接收的字节数。


查看完整回答
反对 回复 2021-12-20
  • 2 回答
  • 0 关注
  • 166 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号