java - SecurityException 在 OS X 上从 Java 发送广播

标签 java macos sockets permissions broadcast

我正在尝试从我的 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/

相关文章:

java - 在表单上设置相同大小的按钮

java - Intellij 上的 Glassfish 配置

javax.sound.sampled.LineUnavailableException : Why am I getting this exception?

macos - 如何发布 NSSystemDefined NSEvent

c# - C#同步TCP客户端套接字无法解释的丢失数据

c++ - Libevent套接字客户端示例

java - 永久增加java堆大小?

ruby - 在 Mac OS X 上使用 Ruby 在 GUI 中打开文件,最好不要使用 system()

iPhone OS 当前使用情况统计信息(尤其是 2.x 与 3.x)

php - 无法增加 PHP 中打开的最大文件数