Сеть недоступна на DatagramPacket.send с подключенным IP: Порт через WIFI (Android Studio) - PullRequest
0 голосов
/ 07 ноября 2019

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

private InetSocketAddress drone_address = new InetSocketAddress("192.168.10.1", 8889); // drone address for UDP communication
private InetSocketAddress local_address = new InetSocketAddress("", 9000); // for socket binding

 public void messageDrone()
    {
        String _message = Orderer.getText().toString();  // value of the text field
        Log.d("UDP_Client", "Message to send to drone: " + _message);
        DatagramPacket datagramPacket = new DatagramPacket(
                _message.getBytes(),
                _message.length(),
                drone_address // where we send the data to
        );
        try {
            clientSocket.send(datagramPacket);
            Log.d("UDP_Client", "Message was successfully sent to drone!");
        } catch (IOException e) {
            e.printStackTrace(); // failed to send message
            Console.setText((e.toString()));
        }
        Orderer.setText(""); // clear text info on submit
    }

И используя эти разрешения:

<uses-permission android:name = "android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name = "android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name = "android.permission.INTERNET"/>

Мой клиентский сокет был правильно создан с использованием local_address, предоставленного сверху. Адрес дрона на 100% правильный, и ошибка возникает из-за

clientSocket.send(datagramPacket);

, который возвращает

java.io.IOException: sendto failed: ENETUNREACH (Network is unreachable)

Отправленное сообщение представляет собой простую строку «команда», которая должна «инициировать режим SDK». «на дроне, поэтому позволяет ему выполнять следующие команды. Заказчик и Консоль - просто текстовые представления в моем .xml.

Пожалуйста, помогите !! Я уверен, что ответ очень прост, но мне не удалось найти его после нескольких часов поиска ...

Спасибо !!

...