2010-06-23 6 views
3

J'utilise le code suivant pour recevoir les données d'un port particulier. Cela ne fonctionne pas sous Android. Mais l'envoi de données à un port particulier fonctionne bien.Comment recevoir des données en utilisant UDP dans Android?

public class UDPDemo extends Activity { 
    private TextView tv; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    tv = (TextView)findViewById(R.id.recv_message); 
    try { 
     DatagramSocket clientsocket=new DatagramSocket(9876); 
     byte[] receivedata = new byte[1024]; 
     while(true) 
     { 
     DatagramPacket recv_packet = new DatagramPacket(receivedata, receivedata.length); 
     Log.d("UDP", "S: Receiving..."); 
     clientsocket.receive(recv_packet); 
     String rec_str = new String(recv_packet.getData()); 
     tv.setText(rec_str); 
     Log.d(" Received String ",rec_str); 
     InetAddress ipaddress = recv_packet.getAddress(); 
     int port = recv_packet.getPort(); 
     Log.d("IPAddress : ",ipaddress.toString()); 
     Log.d(" Port : ",Integer.toString(port)); 
     } 
    } catch (Exception e) { 
     Log.e("UDP", "S: Error", e); 
    } 
    } 
} 
+0

Essayez-vous ceci sur un périphérique ou un émulateur? –

+0

Est-ce que ce problème est résolu? Pouvez-vous marquer comme répondu si nous vous avons aidé? – ktingle

Répondre

5

Si vous utilisez l'émulateur, vous devrez peut-être configurer redirects, rappelez-vous l'émulateur est derrière un routeur virtuel. En d'autres termes, tapez ces commandes dans;

telnet localhost 5554 
redir add udp:9876:9876 

et réessayez.

+0

Où ces commentaires devraient-ils être ajoutés? – Antimony

+0

Peu importe, j'ai découvert. Pour référence future: https://groups.google.com/forum/?fromgroups=#!topic/android-developers/1oVqP0EuBrg – Antimony

0

Used Port numbers

Créer Datagram paquet

try { 
      mDataGramSocket = new DatagramSocket(Config.PORT_NUMBER); 
      mDataGramSocket.setReuseAddress(true); 
      mDataGramSocket.setSoTimeout(1000); 
     } catch (SocketException e) { 
      e.printStackTrace(); 
     } 

Appel ci-dessous fonction par AsyncTask

Créer fonction pour recevoir infiniment

public void receive() { 


    String text; 

    byte[] message = new byte[1500]; 
    DatagramPacket p = new DatagramPacket(message, message.length); 



    try { 


     while (true) { // && counter < 100 TODO 
      // send to server omitted 
      try { 
       mDataGramSocket.receive(p); 
       text = new String(message, 0, p.getLength()); 
       // If you're not using an infinite loop: 
       //mDataGramSocket.close(); 

      } catch (SocketTimeoutException | NullPointerException e) { 
       // no response received after 1 second. continue sending 

       e.printStackTrace(); 
      } 
     } 


    } catch (Exception e) { 

     e.printStackTrace(); 
     // return "error:" + e.getMessage(); 
     mReceiveTask.publish("error:" + e.getMessage()); 
    } 

    // return "out"; 


} 
Questions connexes