(这是我知道的)一个非常基本的问题。我正在尝试创建一个简单的应用程序,该应用程序通过WIFI通过UDP协议从手机向无人机发送消息。 我知道要使用的无人机IP和端口,并且在运行任何测试之前,请确保手机已连接至无人机发出的WIFI。连接到WIFI时,我可以从计算机ping通无人机。这是我得到的:
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)
发送的消息是一个简单的字符串“ command”,应该在无人机上“启动SDK模式”,因此允许它执行以下命令。 Orderer和Console只是我的.xml中的textViews。
请帮助!!我敢肯定答案很简单,但是经过数小时的搜索,我还是没有找到答案。
谢谢!