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.