2011-09-17 13 views
5

Tengo pocas preguntas con respecto a Socket Communication en Android.Android - Socket de servidor

1) he desarrollado aplicaciones para android socket del servidor que escucha en el puerto 8888.

a) Cuando Puedo alojar mi servidor en el emulador que soy incapaz de comunicarse a través de aplicaciones de cliente que tengo en mi PC ya que ambas aplicaciones (Emulator & Client) están en mi computadora portátil & en la misma red, creo que deberían poder comunicarse entre ellas.

b) Cuando despliegue la misma aplicación de servidor en mi dispositivo móvil Android e intento comunicarla a través de la misma aplicación cliente que tengo en mi PC, la aplicación cliente da una excepción de tiempo de espera porque no puede comunicarse con ella.

Mi primera pregunta es ¿Cómo puedo probar la aplicación de socket del servidor/cliente con Emulator & 1 dispositivo Android? ¿Puedo usar la aplicación de socket de cliente de mi PC para probar mi socket de servidor?

** Tengo la aplicación de socket de cliente para mi otra aplicación, por lo que no hay ningún problema con la aplicación cliente.

2) Mi segunda pregunta es para probar mi aplicación de servidor en el dispositivo Android ¿Tengo que reenviar el puerto deseado? a) Para Emulator: ¿Cómo puedo reenviar el puerto? b) Para el dispositivo: ¿Cómo puedo reenviar el puerto? c) ¿Puedo reenviar el puerto programáticamente?

** Sólo para información:

Estoy usando Eclipse como herramienta de Desarrollos androide.

** MY Server Code porque también puede haber un problema con el código del socket de mi servidor.

Socket socket = null; 
      DataInputStream dataInputStream = null; 
      DataOutputStream dataOutputStream = null; 
      ServerSocket serverSocket = null; 
     try 
     { 
      serverSocket = new ServerSocket(SERVERPORT); 
      System.out.println("Listening :" + SERVERPORT); 
      System.out.println("Server IP:" + SERVERIP); 
     } 
     catch (Exception e) 
     {    
      e.printStackTrace(); 
     } 
     while(true) 
     { 
      try 
      { 
       socket = serverSocket.accept(); 
       BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
       System.out.println("ip: " + socket.getInetAddress());     
       String str = in.readLine(); 
       System.out.println("message Received: " + str); 
      } 
      catch (Exception e) 
      {     
       e.printStackTrace(); 
      }    
      finally 
      { 
       if(socket!= null) 
       { 
        try 
        { 
         socket.close(); 
        } 
        catch (IOException e) 
        { 
         e.printStackTrace(); 
        } 
       } 
       if(dataInputStream!= null) 
       { 
        try 
        { 
         dataInputStream.close(); 
        } 
        catch (IOException e) 
        { 
         e.printStackTrace(); 
        } 
       }     
       if(dataOutputStream!= null) 
       { 
        try 
        { 
         dataOutputStream.close(); 
        } 
        catch (IOException e) 
        { 
         e.printStackTrace(); 
        } 
       } 
      } 
     } 

Editado: Una parte muy interesante es que si fijo puerto a 8080 Socket cliente de aplicación del PC no se conectan a la aplicación para Android en mi dispositivo Android, pero no recibo zócalo en mi servidor, ni los datos Envío. No ocurre nada después del enlace =>socket = serversocket.accept();

También he establecido el permiso en el manifiesto.


Respuesta

6

Para su primera pregunta, sobre cómo acceder a la red desde el emulador: el emulador se ejecuta en su propio espacio de direcciones de red, aislado de su PC. Debe configurar la redirección de red para acceder a los dispositivos en su red.

Ver más detalles en https://developer.android.com/studio/run/emulator-networking.html

+0

Ok, eso funcionó para mí, ahora solo queda la pregunta ¿cómo puedo ejecutar este mismo servidor en mi dispositivo Android? – KhanZeeshan

+0

No estoy seguro de haber seguido la pregunta. ¿Te refieres a la situación 1b anterior?Si es así, debería funcionar bien, asumiendo que la PC está tratando de conectarse a través del puerto expuesto a la red (el configurado para el reenvío). – chr

+0

Sí, la única pregunta que queda sin respuesta es sobre el dispositivo Android. Cuando reenvío el puerto en Emulator, puedo comunicarme con el dispositivo Socket de la PC, pero sé cómo hacer que la aplicación cliente de esa PC se comunique con la aplicación Android implementada en el dispositivo Android. – KhanZeeshan

9

se ha marcado el permiso dentro de tu Manifest.xml?

<uses-permission android:name="android.permission.INTERNET" /> 

es needet a los zócalos de configuración

+0

sí, yo tengo. lo siento, me olvidé de mencionar eso. – KhanZeeshan

Cuestiones relacionadas