gpt4 book ai didi

java - 不回复UDP广播,只回复单播

转载 作者:行者123 更新时间:2023-11-30 11:20:21 25 4
gpt4 key购买 nike

在我的 Android 应用程序中,我正在向地址 255.255.255.255、端口 6400 发送 UDP 广播。我使用 PC 程序 Packet Sender 作为自动发送回复的 UDP 服务器。

当我在 Android 应用程序中收听此回复时,它从未收到回复。如果我不将数据包发送到 255.255.255.255,而是发送到 PC 的特定 IP 地址,我只能收到回复。

private String udpDestinationAddress = "255.255.255.255";
private int udpDestinationPort = 6400;
private int udpTimeoutMs = 5000;
private String udpData = "test";

DatagramSocket socket;
socket = new DatagramSocket(12345);
socket.setBroadcast(true);
socket.setSoTimeout(udpTimeoutMs);
socket.connect(InetAddress.getByName(udpDestinationAddress), udpDestinationPort);

// send part
byte[] data = udpData.getBytes();
int length = data.length;
DatagramPacket packet = new DatagramPacket(data, length);
socket.send(packet);

// receive part
byte[] buffer = new byte[1000];

// Initialize the packet
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);

// Receive the packet
socket.receive(packet); // it timeouts here (if timeout=0, then it hangs here forever)

// Get the host IP
String hostIP = packet.getAddress().toString().replace("/", "");

在 PC 程序中,我将其设置为自动回复(使用另一个随机字符串)端口 6400 上的数据包。这与我测试过的其他应用程序(各种 UDP 测试 Android 应用程序)配合得很好。但是,我的应用似乎无法收到回复。

只有当我将 udpDestinationAddress 设置为 PC 的特定 IP 时,我才能在我的应用程序中收到回复。我还尝试了“192.168.5.255”(在我的本地子网上广播)而不是“255.255.255.255” - 仍然不起作用。

最佳答案

我发现了问题。

我需要将其绑定(bind)到 packet,而不是将目标 IP 和端口绑定(bind)到 socket

所以,而不是:

socket.connect(InetAddress.getByName(udpDestinationAddress), udpDestinationPort);
...
DatagramPacket packet = new DatagramPacket(data, length);

...改用这个:

InetAddress addr = InetAddress.getByName("255.255.255.255");
DatagramPacket packet = new DatagramPacket(udpData.getBytes(), udpData.length(), addr, udpDestinationPort);

关于java - 不回复UDP广播,只回复单播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22766158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com