我有一个java应用程序。我正在使用 eclipse 编写、编译和创建一个可运行的 .jar。
该程序用于发现 OCF 设备。
它使用UDP和多播。
组播代码
public static void sendMulticast(byte[] data) throws Exception{
DatagramPacket pack = new DatagramPacket(data, data.length, mgroup, mport);
msocket.send(pack);
}
public static byte[] recieveMulticast(int timeout) throws Exception{
DatagramPacket packet;
byte[] data = new byte[AppConfig.ocf_buffer_size];
packet = new DatagramPacket(data, data.length);
msocket.setSoTimeout(timeout);
msocket.receive(packet);
return data;
}
当我从 Eclipse 启动它时,该代码有效。当我在 Linux 上从控制台运行 .jar 时,它也可以工作。
但是当我双击启动它时,它不起作用。
从控制台启动时,它会在一秒钟内找到我的测试设备。双击开始时,它永远找不到。
我还没有在 Windows 上测试过它,但问题仍然存在于 Linux 上。
从控制台或双击启动 .jar 有什么区别?为什么它会影响多播消息?
我正在使用“将所需的库打包到生成的 JAR 中”。我在 Eclipse 中使用 java 1.7,在 Linux 上使用 1.8,也许这就是问题所在?但是为什么从控制台运行它?如果我使用 sudo,我会理解,但我没有。