Android - Server Socket

Tenho poucas perguntas sobre a Comunicação por soquete no Androi

1) Desenvolvi o aplicativo de soquete de servidor para android que escuta a porta 8888.

a) Quando eu hospedo meu servidor no emulador, não consigo me comunicar com ele através do aplicativo Cliente que tenho no meu PC, pois o aplicativo (Emulador e Cliente) está no meu laptop e na mesma rede, acho que eles deveriam ser capazes de se comunica

b) Quando implanto o mesmo aplicativo de servidor no meu dispositivo móvel Android e tento comunicá-lo através do mesmo Aplicativo Cliente que tenho no meu PC, o aplicativo cliente dá uma exceção de tempo limite, pois não consegue se comunicar com ele.

Minha primeira pergunta é Como posso testar o aplicativo de soquete de servidor / cliente com o Emulador e um dispositivo Android? Posso usar o aplicativo de soquete cliente do meu PC para testar o soquete do servidor?

** Eu tenho o Aplicativo de Soquete de Cliente para meu outro aplicativo, portanto não há nenhum problema com o aplicativo de client

2) Minha segunda pergunta é para testar meu aplicativo de servidor no dispositivo Android. Tenho que encaminhar a porta desejada? a) Para Emulador: Como posso encaminhar a porta? b) Para o dispositivo: como posso encaminhar a porta? c) Posso encaminhar a porta programaticamente?

**Apenas para informação

Estou usando o Eclipse como ferramenta de desenvolvimento do Androi

** MEU código do servidor, pois também pode haver um problema com o código do soquete do meu servido

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 Uma parte muito interessante é que, se eu definir a porta para o Client Socket App do 8080 PC, conecto ao Android App no meu dispositivo Android, mas não recebo o soquete no meu servidor nem os dados que envio. Nada acontece após o link =>socket = serversocket.accept ();

Também defini a permissão no manifesto.


questionAnswers(2)

yourAnswerToTheQuestion