SecurityException отправка трансляции с Java на OS X - PullRequest
2 голосов
/ 27 февраля 2011

Я пытаюсь отправить трансляцию из Java на моем Mac.Кажется, это должно работать, но я получаю исключение 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 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)

Ответы [ 2 ]

3 голосов
/ 27 февраля 2011

Сделав небольшое прибегая к помощи, вы должны сообщить сокету, что используется DatagramChannel, что это широковещательный канал с кодом:

channel.socket().setBroadcast(true);

Я думаю, что вам просто нужно установить опцию широковещательного сокета на 'channel', который является базовым сокетом O / S. Очевидно, это будет выполнимо с уровня канала, как только выйдет java7, но в настоящее время вам нужно получить доступ к DatagramSocket, чтобы установить параметр.

0 голосов
/ 27 февраля 2011

Это SocketException, а не SecurityException (или AccessControlException).Похоже, ОС не позволяет вашему процессу отправлять эту дейтаграмму.

...