¿Cómo podemos comunicarnos entre el emulador de Android y Java a través de sockets utilizando una dirección IP 127.0.0.1 en el lado del servidor (Java)?

Un buen método es hacer un servidor TCP Java y un Cliente TCP Android
Cree un objeto ServerSocket en su código Java y haga que acepte una conexión para conectarse a un cliente.

ServerSocket sSoc = nuevo ServerSocket (8989); // El ServerSocket está configurado para escuchar en el puerto 8989
Socket soc = sSoc.accept (); // Para que el socket se conecte al cliente

Para conectarse al socket desde el cliente, cree un nuevo socket como el siguiente:

Socket soc = new Socket (ip, 8989); // la ip es la dirección IP del servidor, como cadena, por ejemplo, “127.0.0.1” o “localhost”

ahora, para escribir en cualquiera de los zócalos, puede hacer lo siguiente:

String toSend = “Vamos a enviar esta línea”;
byte [] buffer = toSend.getBytes (“UTF-8”); // Codificación en el sistema UTF-8
DataOutputStream dos = new DataOutputStream (soc.getOutputStream ()); // obtiene el flujo de salida
dos.write (buffer, 0, buffer.length); // escribe el buffer completo
dos.writeBytes (“\ n”); // Una nueva línea elegante
dos.flush (); // vaciar los datos
dos.close ();
soc.close ();

//////////////////////////////////////////////////////////////////////////
////////////// Para leer desde el socket del cliente o del servidor, haga esto: /////////////
//////////////////////////

DataInputStream dis = new DataInputStream (soc.getInputStream ()); / obtiene flujo de entrada
byte [] readBuffer = nuevo byte [5 * 1024]; // un búfer de 5 kb para leer datos
int read = dis.read (buffer); // almacena valores leídos en el buffer

if (read! = – 1) // if realmente leído
{
byte [] readData = nuevo byte [lectura]; // crea una matriz de bytes limpia de tamaño exacto
System.arraycopy (buffer, 0, readData, 0, read); // copiar hasta ‘leer’ el número de bytes
String readString = “”; // Crea una cadena en blanco para colocar datos
tratar{
r = nueva cadena (readData, “UTF-8”); // decodificar desde UTF-8
} catch (UnsupportedEncodingException e) {}

// HAGA ALGO CON LA CADENA “r” AQUÍ

}

Así es como puede crear un servidor y varios clientes, y transmitir datos … U podría querer hacer los códigos de conexión en un nuevo hilo ya que estas operaciones de bloqueo podrían congelar su IU.

Suponiendo que todo funciona localmente (entre un cliente y el servidor) es posible que desee saber esto: Usando el emulador, específicamente:

Si desea acceder a los servicios que se ejecutan en la interfaz de bucle invertido de su máquina de desarrollo (también conocida como 127.0.0.1 en su máquina), debe usar la dirección especial 10.0.2.2 en su lugar

Con respecto a la parte viceversa de su pregunta, generalmente no es práctico iniciar la comunicación desde el servidor debido a los firewalls y similares. Generalmente se requiere que el cliente inicie la conexión. Más sobre esto: perforación de agujeros TCP.

El problema fundamental con esto es que 127.0.0.0/8 está específicamente reservado para ser asignado siempre a una interfaz de bucle invertido de cualquier dispositivo dado. Si el emulador le permite contactarlo directamente, estaría haciendo un trabajo terrible al simular lo que hace un dispositivo Android real.

Hay otras puertas de enlace, la más común es 10.0.2.2, pero supongo que esto se puede cambiar en alguna parte.