Android: java.net.DatagramSocket.bind: Исключение недопустимого аргумента

Общие сведения: я пишу простое UDP-приложение для проверки связи с бета-сервером, которым я управляю каждую минуту или около того, чтобы сообщить мне, что он все еще работает (я не могу включить пинг на сервере для тех, кому интересно). Я планирую запустить это на своем телефоне, чтобы предупреждать меня, когда сервер больше не отвечает.

Я пытаюсь использовать, казалось бы, простой java.net.DatagramSocket как таковой:

    try
    {
        socket = new DatagramSocket();
        socket.bind(null);
    } 
    catch (SocketException e)
    {
        System.out.println(e.toString());
        throw e;
    }

Позвольте мне также сказать, что я включил разрешения для Интернета через манифест Android, и если я удалю для этого пункт uses, я получу ошибку разрешений, поэтому я уверен, что все работает нормально. Когда я загружаю этот код на виртуальное устройство Android (AVD) и выполняю его, при вызове функции bind () я получаю следующее исключение:

03-17 19: 07: 39.401: INFO / System.out (338 ): java.net.BindException: недопустимый аргумент

Согласно этой документации, нулевой аргумент является правильным:

public void bind (SocketAddress localAddr)

Начиная с: API уровня 1

Связывает этот сокет с локальным адресом и портом, указанными localAddr. Если это значение равно нулю, используется любой свободный порт на допустимом локальном адресе .

Но не доверяя документации, я решил перечислить IP-адреса на моем устройстве следующим образом:

    ArrayList  allInterfaces = Collections.list(NetworkInterface.getNetworkInterfaces());

    NetworkInterface eth = allInterfaces.get(0);

    InetSocketAddress addr = new InetSocketAddress(eth.getInetAddresses().nextElement(), port);

    try
    {
        socket = new DatagramSocket();
        socket.bind(addr);
    } 
    catch (SocketException e)
    {
        System.out.println(e.toString());
        throw e;
    }

Когда я просматриваю код, он отлично работает, и я вижу два IP-адреса на AVD, но получаю точно такое же исключение при вызове bind (). Кто-нибудь видит, что мне может не хватать? Я продолжу исследование и, надеюсь, опубликую решение моей собственной проблемы, но я надеюсь, что кто-нибудь сможет решить эту проблему для меня.

7
задан Lance 18 March 2011 в 02:10
поделиться