Đây là vấn đề, rất đơn giản (để hiểu ..):Cách gửi gói UDP tới một máy tính cụ thể khi tất cả máy tính trên mạng có cùng địa chỉ IP công cộng?
Tôi có 2 máy tính ở nhà, cả hai đều có cùng địa chỉ IP công cộng (ví dụ: 1.2.3.4).
Tôi có 1 máy tính tại một nơi cà phê (mạng khác nhau) để nó có một địa chỉ IP công cộng khác.
Tôi muốn gửi thư (ví dụ: "hi") từ máy tính tại quán cà phê đến MỘT trong số các máy tính tôi có ở nhà.
Tôi đang sử dụng Java, suy nghĩ của chương trình rất đơn giản sau đây cho người gửi (tôi cất cánh xử lý ngoại lệ vì đơn giản):
Trong chính tôi làm:
sendPacket("hi");
và tôi có
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
}
Nếu tôi có người nghe (người nhận) đang chạy trên cả hai máy tính ở nhà (cả với cùng địa chỉ IP công cộng 1.2.3.4) làm cách nào tôi có thể chỉ định thư nào tôi định gửi thư này?
Hãy hiểu: không có máy tính nào trong số hai máy tính trong nhà của bạn có địa chỉ IP công khai đó. Bộ định tuyến của bạn có địa chỉ công cộng đó. Và bộ định tuyến của bạn cung cấp cả hai máy tính của bạn một địa chỉ IP riêng. Bạn có thể sử dụng tính năng "chuyển tiếp cổng" trên bộ định tuyến để giúp bạn. Xem "NAT" trên wikipedia để biết thêm thông tin cơ bản về điều này. – Haozhun