2017-06-25 1 views
0
protected void onCreate(Bundle savedInstanceState) { 
    ... 
    byte sendData[] = new byte[1024]; 
    String sentence = "Hey!"; 
    sendData = sentence.getBytes(); 
    int ret = 0; 
    try { 
     DatagramSocket socket = new DatagramSocket(); 
     InetAddress IPAddress = InetAddress.getByName("192.168.0.11"); 
     DatagramPacket sendPacket = new 
      DatagramPacket(sendData,4, IPAddress,4202); 
     socket.send(sendPacket); 
     socket.close(); 
    } 

Le code fonctionne si socket.send est mis en commentaire.UDP, Samsung S4. L'application s'est arrêtée sur socket.send()

Manifest contient: uses-permission android:name="android.permission.INTERNET"

Merci.

Répondre

0

Si vous exécutez socket.send, il donnera exception NerworkOnMainThread si vous exécutez ce code dans la méthode onCreate ou thread d'interface utilisateur,

Essayez de créer fil comme

private LinkedBlockingQueue<DatagramPacket> writeQueue = new LinkedBlockingQueue<DatagramPacket>(); 

private Thread sendThread = new Thread() { 
    private boolean shouldStop = false; 

    @Override 
    public void run() { 
     while (!shouldStop) { 
      if ((finshed) && (writeQueue.size() == 0)) { 
       return; 
      } 
      try { 
       DatagramPacket packet = writeQueue.take(); 
       if (socket == null) { 
        shouldStop = true; 
       } else { 
        socket.send(packet); 
       } 
      } catch (InterruptedException e) { 
       shouldStop = true; 
      } catch (IOException e) { 
       e.printStackTrace(); 
       shouldStop = true; 
      } 
     } 
    } 
};