Android - Enchufe del servidor

Tengo pocas preguntas sobre la comunicación de sockets en Android.

1) He desarrollado una aplicación de socket de servidor para Android que escucha el puerto 8888.

a) Cuando alojo mi servidor en el emulador, no puedo comunicarme con él a través de la aplicación Cliente que tengo en mi PC, ya que ambas aplicaciones (Emulador y Cliente) están en mi computadora portátil y en la misma red, creo que deberían poder comunicarse entre sí.

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

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

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

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

**Solo para información

Estoy usando Eclipse como herramienta de desarrollo de Android.

** MI código de servidor, ya que también puede haber problemas con el código de socket de mi servidor también.

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 configuro el puerto en la aplicación Client Socket de 8080 PC, me conecto a la aplicación Android en mi dispositivo Android, pero no recibo el socket en mi servidor ni los datos que envío. No pasa nada después del enlace =>socket = serversocket.accept ();

También he establecido el permiso en el manifiesto.


Respuestas a la pregunta(2)

Su respuesta a la pregunta