Tôi đang cố tạo ứng dụng trò chuyện java cho lớp mạng của mình. Hiện tại, tôi đang cố gắng kết nối với ai đó đằng sau một bộ định tuyến khác. Cách tôi có dự án của tôi ngay bây giờ là tôi có một chương trình máy khách và một chương trình máy chủ. Chương trình khách hàng đầu tiên đăng nhập vào chương trình máy chủ ghi nhật ký IP và cổng của họ trong cơ sở dữ liệu và sau đó máy chủ cung cấp cho họ danh sách bạn bè của họ bằng IP và cổng của họ. Sau đó, máy khách đóng kết nối đến máy chủ và cố gắng kết nối với một máy khách khác bằng cách sử dụng thông tin mà máy chủ gửi trả về. Cho đến nay chương trình của tôi chỉ hoạt động kết nối với máy chủ và nhận IP và cổng của bạn bè nhưng khi tôi sử dụng các giá trị đó để kết nối với ứng dụng khách khác mà tôi không thể kết nối.Java nat traversal cho ứng dụng chat
socket = new Socket();
socket.setReuseAddress(true);
socket.setKeepAlive(true);
socket.setSoLinger(true, 10);
socket.bind(new InetSocketAddress(Port));
socket.connect(new InetSocketAddress(host, SERVER_PORT));
reusePort = socket.getLocalPort();
Trên đây là đoạn mã java được sử dụng để kết nối với máy chủ sau đó là những gì tôi làm ở phía máy khách.
ss = new ServerSocket(reusePort);
Vì vậy bây giờ về mặt kỹ thuật tôi đang lắng nghe trên cổng cùng tôi đã sử dụng để kết nối đến máy chủ mà được đăng nhập và là retrievable cho khách hàng khác và có trong bảng NAT với ip và cổng của tôi. Tôi không chắc chắn những gì tôi đang thiếu hoặc nếu có một số giao thức hoặc một cái gì đó mà tôi phải làm. Tôi đã nhìn vào lỗ hổng TCP và UDP nhưng tôi không chắc chắn làm thế nào mà thực sự được thực hiện hoặc làm thế nào để thực hiện nó.
Mọi đề xuất sẽ được đánh giá cao.
Tôi thấy bạn đã chấp nhận câu trả lời, nhưng có vẻ như bạn muốn xem xét "Lỗ Puching". Câu trả lời được chấp nhận không thực sự trả lời câu hỏi của bạn, nhưng thay vào đó yêu cầu bạn cho phép tất cả thông tin của ứng dụng của bạn đi qua Máy chủ của bạn và dường như bạn muốn kết nối trực tiếp với khách hàng của mình. –
hey bạn đã tìm thấy câu trả lời của bạn. làm ơn giúp tôi. tôi đang gặp vấn đề tương tự. –
Bản sao có thể có của [STUN, TURN, thư viện ICE cho Java] (http://stackoverflow.com/questions/2039147/stun-turn-ice-library-for-java) –