Ecco il problema, è molto semplice (per capire ..):Come inviare un pacchetto UDP a un computer specifico quando tutti i computer della rete hanno lo stesso indirizzo IP pubblico?
Ho due computer a casa, entrambi hanno lo stesso indirizzo IP pubblico (ad esempio 1.2.3.4).
Ho 1 computer in un caffè (rete diversa), quindi ha un indirizzo IP pubblico diverso.
Desidero inviare un messaggio (ad esempio "ciao") dal computer al posto del caffè a UNO dei computer che ho a casa.
sto usando Java, pensare il seguente programma molto semplice per il mittente (ho tolto la gestione delle eccezioni per semplicità):
In main devo fare:
sendPacket("hi");
e ho
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
}
Se il mio listener (ricevitore) è in esecuzione su entrambi i computer a casa (entrambi con lo stesso indirizzo IP pubblico 1.2.3.4), come posso specificare a quale intendo inviare questo messaggio?
Si prega di comprendere: nessuno dei due computer in casa ha quell'indirizzo ip pubblico. Il tuo router di casa ha quell'indirizzo pubblico. E il tuo router di casa fornisce ai tuoi computer un indirizzo IP privato. Probabilmente puoi usare la funzione "port forwarding" sul tuo router per aiutarti. Vedi "NAT" su wikipedia per maggiori informazioni di base su questo. – Haozhun