Aquí está el problema, es muy simple (para comprender ...):¿Cómo enviar un paquete UDP a una computadora específica cuando toda la computadora en la red tiene la misma dirección IP pública?
Tengo 2 computadoras en casa, ambas tienen la misma dirección IP pública (por ejemplo, 1.2.3.4).
Tengo 1 computadora en una cafetería (red diferente) por lo que tiene una dirección IP pública diferente.
Deseo enviar un mensaje (por ejemplo, "hola") de la computadora en el lugar de café a UNA de las computadoras que tengo en casa.
estoy usando Java, pensamos en el siguiente programa muy simple para el remitente (que se quitó el manejo de excepciones para simplificar):
En principal que hacer:
sendPacket("hi");
y tengo
void sendPacket(String message){
DatagramSocket myServerSocket = new DatagramSocket(9000); // server socket
byte[] sendData = new byte[message.length()]; // build msg
sendData = message.getBytes();
InetSocketAddress destSocketAddr = new InetSocketAddress("1.2.3.4", 9000); // destination socket addr
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, destSocketAddr); // make packet
myServerSocket.send(sendPacket); // send packet
}
Si tengo mi oyente (receptor) ejecutándose en las dos computadoras en mi hogar (ambas con la misma dirección IP pública 1.2.3.4) ¿cómo puedo especificar a cuál me propongo enviar este mensaje?
Por favor, comprenda: ninguna de las dos computadoras en su hogar tiene esa dirección IP pública. Su enrutador doméstico tiene esa dirección pública. Y el enrutador de su hogar proporciona a sus computadoras una dirección IP privada. Probablemente pueda usar la función de "reenvío de puertos" en su enrutador para ayudarlo. Consulte "NAT" en la wikipedia para obtener más información acerca de esto. – Haozhun