Oto problem, jest bardzo prosty (aby zrozumieć ..):Jak wysłać pakiet UDP do określonego komputera, gdy cały komputer w sieci ma ten sam publiczny adres IP?
Mam 2 komputery w domu, oba mają ten sam publiczny adres IP (np. 1.2.3.4).
Mam 1 komputer w kawiarni (inna sieć), więc ma inny publiczny adres IP.
Chcę wysłać wiadomość (np. "Cześć") z komputera w kawiarni na JEDEN z komputerów, które mam w domu.
Używam Java, pomyśl o następującym bardzo prosty program do nadawcy (Zdjąłem obsługę wyjątków dla uproszczenia):
W głównym zrobić:
sendPacket("hi");
i mam
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
}
Jeśli mój słuchacz (odbiornik) działa na obu komputerach w domu (oba z tym samym publicznym adresem IP 1.2.3.4), w jaki sposób mogę określić, do którego z nich chcę wysłać tę wiadomość?
Proszę zrozumieć: żaden z dwóch komputerów w twoim domu nie ma tego publicznego adresu IP. Twój domowy router ma ten publiczny adres. Router domowy zapewnia obu komputerom prywatny adres IP. Prawdopodobnie możesz skorzystać z funkcji "przekierowania portów" na routerze, aby Ci pomóc. Zobacz "NAT" na wikipedii, aby dowiedzieć się więcej na ten temat. – Haozhun