2012-09-29 20 views
10

Estoy tratando de usar sockets UDP en un android, aquí envío mi cadena desde el emulador de Android y la recibo por mi programa Java en PC, pero mi programa Java no recibe nada, aunque cuando utilicé el programa Java como cliente y servidor (hice dos programas Java diferentes) funcionó.¿Cómo usar sockets UDP en android?

Ésta es mi actividad principal androide:

public class First extends Activity { 
Button b; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    b = (Button) findViewById(R.id.button1); 
    b.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Thread t = new Thread(new Second()); 
      t.start(); 
     } 
    }); 

Aquí está mi segunda clase en android:

public class Second implements Runnable { 
Second() 
{ 
    run(); 
} 
public void run() { 
    // TODO Auto-generated method stub 
    try { 

     String messageStr = "Hello Android!"; 
     int server_port = 9876; 
     DatagramSocket s = new DatagramSocket(); 
     InetAddress local = InetAddress.getByName("127.0.0.1"); 
     int msg_length = messageStr.length(); 
     byte[] message = messageStr.getBytes(); 
     DatagramPacket p = new DatagramPacket(message, msg_length, local, 
       server_port); 
     s.send(p); 
    } catch (Exception e) { 

    } 
} 
} 

Este es mi código de Java en el PC:

public static void main(String args[]) throws Exception 
    { 
      DatagramSocket serverSocket = new DatagramSocket(9876); 
      byte[] receiveData = new byte[1024]; 
      byte[] sendData = new byte[1024]; 
      while(true) 
      { 
        DatagramPacket receivePacket = new  DatagramPacket(receiveData,receiveData.length); 
        serverSocket.receive(receivePacket); 
        String sentence = new String(receivePacket.getData(),0,receivePacket.getLength()); 
        InetAddress IPAddress = receivePacket.getAddress(); 
        int port = receivePacket.getPort(); 
        System.out.println("MESSAGE RECEIVED "+sentence+" "+IPAddress+"   "+port); 
      } 
    } 

Respuesta

10

En su Emulación de Android (y dispositivo Android), 127.0.0.1 significa la máquina de emulación de Android, no la PC host. Puede acceder a su host al 10.0.2.2

+0

gracias tonto funcionó –

+0

supongamos que quiero hacer esto a través de wifi, ¿qué debo hacer entonces? –

+0

Haga que su servidor sea accesible desde Internet. – zmbq

Cuestiones relacionadas