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.
Ok, eso funcionó para mí, ahora solo queda la pregunta ¿cómo puedo ejecutar este mismo servidor en mi dispositivo Android? – KhanZeeshan
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
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