将UDP数据包从Android发送到Arduino

时间:2014-11-15 17:21:59

标签: android arduino udp android-networking packets

我是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("数据包地址与连接的地址不匹配");

请有人帮我这个吗?非常感谢你给予的任何帮助:)

1 个答案:

答案 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();
}

发现大多数通信都需要在一个线程内完成。和平。

相关问题