我正在尝试从我的 Mac 上的 java 发送广播。这看起来应该可行,但我收到了 SecurityException。我已经验证没有安装 SecurityManager,并尝试使用 sudo 运行我的类。
代码:
public static void main(String[] args) throws Exception{
SocketAddress sockAddr = new InetSocketAddress("192.168.0.255",
4000);
ByteBuffer bb = ByteBuffer.allocate(10);
bb.put(new Byte("1"));
DatagramChannel channel = DatagramChannel.open();
channel.send(bb, sockAddr);
}
异常(exception):
Exception in thread "main" java.net.SocketException: Permission denied
at sun.nio.ch.DatagramChannelImpl.send0(Native Method)
at sun.nio.ch.DatagramChannelImpl.sendFromNativeBuffer(DatagramChannelImpl.java:301)
at sun.nio.ch.DatagramChannelImpl.send(DatagramChannelImpl.java:281)
at sun.nio.ch.DatagramChannelImpl.send(DatagramChannelImpl.java:250)
at Test.main(Test.java:15)
最佳答案
完成一些谷歌搜索后,您需要使用以下代码告诉套接字 DatagramChannel 正在使用它是一个广播 channel :
channel.socket().setBroadcast(true);
我认为这只是你需要在“ channel ”上设置广播套接字选项,这是底层的操作系统套接字。显然,一旦java7出来,这从 channel 级别就可以实现,但目前您需要访问DatagramSocket来设置参数。
关于java - SecurityException 在 OS X 上从 Java 发送广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5134288/