我是Android开发的新手,所以请保持温和:p我在从我的Android手机发送UDP数据包到我的anrdiuno(带有WiFi屏蔽)时遇到问题。我可以使用Play商店中的TCP / UDP终端应用程序发送和接收来自arduino的数据包,没有任何问题。对于一个简单的初学者任务,我想只发送一个数据包给我的arduino(在我的本地网络上,地址为192.168.0.101并侦听端口5000),当我按下一个按钮时,会显示一条消息,说明该数据有已经送走了。我目前的Android代码如下:
//CALLED WHEN USER PRESSES BUTTON
public void sendMessage(View view){
runUdpClient();
// Create the text view
TextView textView = new TextView(this);
textView.setTextSize(40);
textView.setText("MESSAGE SENT");
// Set the text view as the activity layout
setContentView(textView);
}
private void runUdpClient() {
try{
String msg = "Hello";
byte[] msgBytes = (msg.getBytes());
String serverHostname1 = new String ("192.168.0.101");
InetAddress ip = InetAddress.getByName(serverHostname1);
//SEND ON PORT 5000
DatagramSocket socket = new DatagramSocket(5000);
socket.setBroadcast(true);
DatagramPacket packet = new DatagramPacket(msgBytes,msgBytes.length, ip, 5000);
//packet.setAddress(ip);
//packet.setPort(5000);
socket.send(packet);
socket.close();
}catch(Exception e){
e.printStackTrace();
}
}
我调试了代码,发现调用socket.send(数据包)时会抛出异常,(虽然我不知道如何查看此代价)。单步执行send函数后,抛出了这个异常:
IllegalArgumentException("数据包地址与连接的地址不匹配");
请有人帮我这个吗?非常感谢你给予的任何帮助:)
答案 0 :(得分:0)
找到了解决这个问题的方法。如果其他人遇到此问题,解决方案是从线程内部调用udp数据包发送函数:
public void sendMessage(View view){
final EditText editMessage = (EditText) findViewById(R.id.edit_message);
final String message = editMessage.getText().toString();
new Thread(new Runnable(){
@Override
public void run() {
try {
runUdpClient(message);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}).start();
}
发现大多数通信都需要在一个线程内完成。和平。