Próbuję utworzyć aplikację czatu java dla mojej klasy sieci. W tej chwili utknąłem, próbując połączyć się z kimś za innym routerem. Obecnie mam swój projekt: mam program klienta i program serwera. Programy klienckie najpierw logują się do programu serwera, który rejestruje ich IP i port w bazie danych, a następnie serwer przekazuje im listę swoich przyjaciół wraz z ich adresami IP i portami. Następnie klient zamyka połączenie z serwerem i próbuje połączyć się z innym klientem przy użyciu informacji odesłanych przez serwer. Do tej pory mój program działa tylko łącząc się z serwerem i uzyskując adres IP i port znajomych, ale kiedy używam tych wartości do połączenia z drugim klientem, nie mogę się połączyć.Java nat traversal do aplikacji czatu
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();
Powyżej znajduje się fragment kodu java służący do łączenia się z serwerem, a następnie poniżej, co robię po stronie klienta.
ss = new ServerSocket(reusePort);
Więc teraz technicznie mam słuchać tego samego portu kiedyś połączyć się z serwerem, z którym jest zalogowany i można odzyskać do innego klienta i jest w tabeli NAT z mojego IP i port. Nie jestem pewien, czego mi brakuje lub czy jest jakiś protokół lub coś, co muszę zrobić. Przyjrzałem się dziurkowaniom TCP i UDP, ale nie jestem pewien, jak to się robi i jak go wdrożyć.
Wszelkie sugestie będą mile widziane.
widzę zaakceptowaniu odpowiedzi, ale wydaje się, chcesz wyglądać na „Hole Puching”. Przyjęta odpowiedź tak naprawdę nie odpowiada na twoje pytanie, ale zamiast tego każe ci przekazać wszystkie informacje twojej aplikacji przez serwer, i wydaje się, że chcesz bezpośrednio połączyć swoich klientów. –
hej, znalazłeś odpowiedź. proszę pomóż mi. Mam ten sam problem. –
Możliwy duplikat [STUN, TURN, biblioteka ICE dla Java] (http://stackoverflow.com/questions/2039147/stun-turn-ice-library-for-java) –