Отправка объектов с одного компьютера на другой через Интернет с помощью Hamachi

Я делаю приложение для чата, которое должно отправлять объекты на сервер, а сервер должен обрабатывать этот объект, чтобы получить IP-адрес назначения. Затем используйте IP-адрес, полученный от объекта, чтобы отправить этот объект в другой клиентский чат.

Приложение работает нормально, когда оба клиента подключены к одному и тому же маршрутизатору и к одной и той же сети Hamachi. Однако, когда они находятся в одной и той же сети hamachi, но подключены к разным маршрутизаторам, они оба подключаются к серверу, но только один клиент может отправлять сообщения. Когда другой отправляет сообщение, он достигает сервера, но сервер не может отправить эти сообщения клиенту назначения. (Сервер печатает тайм-аут).

Клиент отправляет объекты:

public class out {

public static void sendObject(Data data){

    System.out.println(data.getDestinatario());

    try {

        Socket socket = new Socket(JOptionPane.showInputDialog("Introduce servers IP"),6666);

        ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream());

        objectOutputStream.writeObject(data);

        objectOutputStream.close();

        socket.close();

    } catch (IOException e) {

        JOptionPane.showMessageDialog(new JPanel().getParent(),e.getMessage());

    }

}

public static void setOnline() throws Exception{

    Socket puerto = new Socket(JOptionPane.showInputDialog("Introduce servers IP"),6363);

    DataOutputStream dataOutputStream = new DataOutputStream(puerto.getOutputStream());

    dataOutputStream.writeUTF(Registry.Registry.get(0).getName());

    dataOutputStream.close();

    puerto.close();}

}

Клиент получает объекты:

public class in {

public static void incomingObject(){



    Thread checkMesage = new Thread(new Runnable() {
        @Override
        public void run() {

            while(true){


                try {

                    ServerSocket gate = new ServerSocket(9999);

                    ObjectInputStream objectInputStream = new ObjectInputStream(gate.accept().getInputStream());

                    Data data = (Data) objectInputStream.readObject();

                    Chat.messages.append(data.getName()+ ": "+ data.getMessage() + "\n");

                    objectInputStream.close();

                    gate.close();


                } catch (Exception e) {
                    e.printStackTrace();
                }


            }

        }
    });

    checkMesage.start();

}

Сервер получает объекты:

public class in {

public static void isOnline() throws Exception {

    ServerSocket serverSocket = new ServerSocket(6363);

    Thread isOnline = new Thread(new Runnable() {
        @Override
        public void run() {

            while (true){

                try {

                    Socket socket = serverSocket.accept();

                    DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());

                    Online.addOnline(new usuario(dataInputStream.readUTF(),socket.getInetAddress().getHostAddress()));

                    dataInputStream.close();

                } catch (IOException e) {
                    e.printStackTrace();
                }

            }

        }
    });

    isOnline.start();

}

public static void incomingObject(){

        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {

                while(true) {
                    try {

                        ServerSocket serverSocket = new ServerSocket(6666);

                        ObjectInputStream objectInputStream = new ObjectInputStream(serverSocket.accept().getInputStream());

                        Data data = (Data) objectInputStream.readObject();

                        System.out.println(data.getMessage());

                        objectInputStream.close();

                        serverSocket.close();

                        out.sendObject(data);


                    } catch (Exception e) {
                        System.out.println(e.getMessage());
                    }
                }

            }
        });

        thread.start();}

}

Сервер отправляет объекты:

public class out {

public static void sendObject(Data data){

    System.out.println(data.getDir());

    try {

        Socket socket = new Socket(data.getDir(),9999);

        ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream());

        objectOutputStream.writeObject(data);

        objectOutputStream.close();

        socket.close();

    } catch (IOException e) {

        e.printStackTrace();

    }}

}

0 ответов

Другие вопросы по тегам