Общие сведения: я пишу простое 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 (). Кто-нибудь видит, что мне может не хватать? Я продолжу исследование и, надеюсь, опубликую решение моей собственной проблемы, но я надеюсь, что кто-нибудь сможет решить эту проблему для меня.