我有多个发射器,配置为当它们收到从服务器通过本地端口 5255、远程端口 5252 发送的广播数据包时发回响应,其中包含字符串“AST show me\0”(如发射器手册中所述)。这应该可以帮助我扫描本地网络内的所有发射器。
我已经实现了一个服务器端代码来广播该字符串消息,但是当我运行该代码时,它在以下代码行中有一个错误:
socket.receive(packet1);
我真的不知道这段代码中我做错了什么或遗漏了什么。
任何帮助将不胜感激。
注意:如果可能有帮助:发射器的 IP 地址来自 192.168.40.* ;服务器IP地址为192.168.40.254。
提前致谢 !!
这是代码:
package socket_test;
import java.io.*;
import java.net.*;
public class Server_UDP_Broadcast {
//@SuppressWarnings("null")
public static void main(String[] args) {
// TODO Auto-generated method stub
DatagramSocket socket = null;
try{
socket = new DatagramSocket(5255);
socket.setSoTimeout(10000);
String str = "AST show me\0";
byte[] buf = new byte[256];
buf = str.getBytes();
InetAddress group = InetAddress.getByName("255.255.255.255");
DatagramPacket packet;
packet = new DatagramPacket(buf, buf.length, group, 5252);
socket.send(packet);
// receive answer and display
byte[] buf1 = new byte[1024];
DatagramPacket packet1 = new DatagramPacket(buf1, buf1.length);
socket.receive(packet1);
String received = new String(packet1.getData(), 0, packet1.getLength());
System.out.println("Answer from I-Lite :: " + received);
}
catch (IOException e) {
e.printStackTrace();
}
}
}
以下是错误:
java.net.SocketTimeoutException: Receive timed out
at java.net.DualStackPlainDatagramSocketImpl.socketReceiveOrPeekData (Native Method)
at java.net.DualStackPlainDatagramSocketImpl.receive0(Unknown Source)
at java.net.AbstractPlainDatagramSocketImpl.receive(Unknown Source)
at java.net.DatagramSocket.receive(Unknown Source)
at socket_test.Server_UDP_Broadcast.main(Server_UDP_Broadcast.java:31)
这是来自wireshark的屏幕截图:
捕获的数据包的详细信息 https://i.stack.imgur.com/SnKUD.jpg
WireShark 截图 https://i.stack.imgur.com/cYFSt.jpg