Serwer + client aplikacja sieciowa

0

Witam, mam problem z połączeniem się do serwera z innych komputerów, nie powiązanych z moim ip. Próbowałem uczynić to przez hamachi, jednak efekty były mizerne.
Dodam, że jeśli próbuję podłączyć się przez localhost, to nie ma najmniejszego problemu z działaniem programu.

Błąd jest zwracany po stronie clienta w tej pętli try{}catch{}:
W kodzie program automatycznie pobiera ip lokalne, jednak nawet po wpisywaniu ip z hamachi dalej wyskakuje ten sam error message

try{
            String local;
            try{
                local = InetAddress.getLocalHost().getHostAddress() + ":" + port;
            }catch(UnknownHostException ex)
            {
                local = "Network Error";
            }
            ip = (String) JOptionPane.showInputDialog(null, "IP: ", "Info", JOptionPane.INFORMATION_MESSAGE, null, null, local);
            port = Integer.parseInt(ip.substring(ip.indexOf(":") + 1));
            ip = ip.substring(0, ip.indexOf(":"));
            
            socket = new Socket(ip, port);
            
                       
            username = (String) JOptionPane.showInputDialog(null, "Username: ", "Info", JOptionPane.INFORMATION_MESSAGE, null, null, username);
                        
            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
            oos.writeObject(username);
            
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
            String response = (String) ois.readObject();
            
            JOptionPane.showMessageDialog(null, response, "Message", JOptionPane.INFORMATION_MESSAGE);
        
            if(response.equals("Your name is already taken!"))
            {
                System.exit(0);
            }
            new Thread(send).start();
            new Thread(receive).start();
            
        }catch(Exception ex)
        {
            JOptionPane.showMessageDialog(null, "Error: błąd w metodzie client", "Alert", JOptionPane.ERROR_MESSAGE);
            System.exit(0);
        }

Jeśli zajdzie potrzeba pokazania większej części kodu zarówno serwera jak i clienta proszę pisać w postach.

0

Podaj stacktrace.

0

Uzupełnię @Shalom'a. Taka obsługa błędu:

        }catch(Exception ex)
        {
            JOptionPane.showMessageDialog(null, "Error: błąd w metodzie client", "Alert", JOptionPane.ERROR_MESSAGE);
            System.exit(0);
        }

w programie, który nie działa to, delikatnie mówiąc, głupota. Dodaj

ex.printStackTrace();

Btw, bądź konsekwentny, albo client i server, albo klient i serwer.

0

wsadziłem do JOptionPane ex.getMessage() oraz ex.getStackTrace() mam nadzieję, że to wystarczy:

Error:błąd w metodzie client Connection refused: connect[Ljava.lang.StackTraceElement;@39137

Niestety nie pamiętam jak sprawdzić błąd wyświetlany w konsoli po włączeniu programu. Jak uda mi się wejść do konsoli w celu sprawdzenia błędu to dam znać z trochę dłuższą linijką.

0

Jak ty uruchamiasz program, że nie masz konsoli? Dwuklik na pliku jar?
Nie ex.getStackTrace(), ale ex.printStackTrace().
Nie ex.getMessage(), ale ex.toString(), dostaniesz dodatkowo nazwę wyjątku.

0

Błąd wyświetlany przy ip kolegi:

java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at client.<init>(client.java:72)
at client.main(client.java:38)

I o dziwo teraz kiedy kolega podłączył się przez hamachi ze mną, program działa i ma się dobrze. Tylko dlaczego wcześniej na innym komputerze program nie chciał podłączyć się do serwera?

1 użytkowników online, w tym zalogowanych: 0, gości: 1