以下内容由CHATGPT及笑面虎共同生成、有用望采纳:
【解题思路】:检查网络设置和防火墙配置,确保两台电脑在同一子网内,并且没有阻止UDP通信。
在处理UDP广播通信时,确保以下几个关键点:
255.255.255.255 或 INADDR_BROADCAST)。以下是修复后的代码示例:
import java.net.*;
public class UDPRadioReceiver {
public static void main(String[] args) throws Exception {
// 创建一个DatagramSocket并绑定到指定端口
DatagramSocket d = new DatagramSocket(2023);
// 设置接收缓冲区
byte[] buffer = new byte[1024 * 64];
// 创建DatagramPacket对象
DatagramPacket dd = new DatagramPacket(buffer, buffer.length);
// 设置接收超时时间,单位毫秒
d.setSoTimeout(1000);
// 循环接收广播消息
while (true) {
try {
// 在这里,我们使用INetAddress.ANY作为接收地址,
// 这样可以接收到所有发往本机的广播消息
dd.setAddress(InetAddress.getByName("255.255.255.255"));
dd.setPort(2023); // 监听的端口号
// 开始接收数据包
d.receive(dd);
// 解析接收到的数据
String receivedData = new String(dd.getData(), 0, dd.getLength());
System.out.println("Received: " + receivedData);
} catch (SocketTimeoutException ste) {
System.out.println("No data received within timeout period.");
}
}
// 关闭DatagramSocket
d.close();
}
}
这个简单的Java程序会一直接收来自广播地址255.255.255.255的广播消息。确保发送端也向这个地址发送广播消息,并且两个设备都在同一个局域网内。
如果你的问题仍然存在,请检查以下事项:
如果你需要更多帮助,比如查看发送端代码示例,或者进一步调试,随时告诉我。
下午好🌅🌅🌅
本答案参考ChatGPT-3.5
问题描述:
使用 DatagramSocket 接收 udp 广播信息,但是接收不到,电脑已经通过 wifi 热点连接另外一台电脑,feiq 可以通信,但是自己写的接收不到。代码如下:
DatagramSocket d = null;
String ipcon = "";
try {
d = new DatagramSocket(2023);
//创建数据包对象
byte[] buffer = new byte[1024 * 64];
DatagramPacket dd = new DatagramPacket(buffer, buffer.length);
d.setSoTimeout(1000);
d.receive(dd);
}
解决方案:
确认广播地址是否正确。
可以使用网络调试工具查看广播地址是否正确。如果不确定,可在设置中设置广播地址。
确认网络是否正常。
确认网络是否正常,可以 ping 网络,查看网络连接状态。
确认端口号是否正确。
确认端口号是否正确,有可能是代码中的端口号设置不正确,需要检查代码中的端口号设置是否正确。
确认防火墙设置。
如果是防火墙设置问题,需要在防火墙中添加允许 udp 端口的规则,或者直接关闭防火墙。
确认代码实现是否正确。
通过阅读源代码,查看是否有错误的逻辑,是否有遗漏的设置,是否有在其他地方修改了变量等情况。
修改后的代码如下:
DatagramSocket d = null;
String ipcon = "";
try {
d = new DatagramSocket(2023);
//创建数据包对象
byte[] buffer = new byte[1024 * 64];
DatagramPacket dd = new DatagramPacket(buffer, buffer.length);
d.setSoTimeout(1000);
d.receive(dd);
ipcon = dd.getAddress().toString();
System.out.println(ipcon);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (d != null) {
d.close();
}
}
参考链接:
https://www.cnblogs.com/liulvshuang/p/12394598.html