我写了一个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 回答
largeQ
TA贡献2039条经验 获得超8个赞
如果您不忽略从 WriteToUDP 返回的错误,它实际上会给您一个错误:“sendto: message to long”
在 OSX 上,最大 UDP 数据报大小默认设置为 9216 字节。您尝试发送 15000 个字节。
如果你只是想写回你收到的东西,那么写
recvBuff[:n]
,其中 n 是之前接收的字节数。
- 2 回答
- 0 关注
- 166 浏览
添加回答
举报
0/150
提交
取消
