2014-11-15 3 views
0

Я новичок в разработке Android, поэтому, пожалуйста, будьте осторожны: p У меня возникли проблемы с отправкой пакетов UDP с моего телефона Android на мой anrdiuno (с экраном WiFi). Я могу отправлять и получать пакеты в или из arduino, используя приложение TCP/UDP Terminal из Play Маркета, без проблем. Для легкой задачи начинающих я хотел бы отправить только один пакет в мой arduino (который находится в моей локальной сети по адресу 192.168.0.101 и прослушивает порт 5000), когда я нажимаю кнопку, появляется сообщение с сообщением о том, что данные имеют было отправлено. Мой текущий андроид код ниже:Отправка пакета UDP с Android на Arduino

//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 (пакет) называется (хотя я не знаю, как для просмотра этой expection). После перехода через функцию отправки это исключение было выбрано:

IllegalArgumentException («Несоответствие адреса пакета с подключенным адресом»);

Пожалуйста, помогите мне с этим, пожалуйста? Спасибо вам за помощь!

ответ

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

Найдено, что большинство коммуникаций должны быть сделаны внутри нити. Мир.

Смежные вопросы