Программа сокет-соединения (TCP / IP), работающая для локального хоста / общей сети, но не для другого IP - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь установить соединение между машиной (сервером), подключенной к сети (например, через точку доступа сети X), и другой (клиент), подключенной к точке доступа сети Y.

Проблема 1:

Кусок кода работает нормально, если сервер и клиент (может быть несколько) подключены к одной сети (скажем, X), но если сервер и клиент находятся в другой сети (X иY) тогда я получаю ошибку тайм-аута соединения.

Проблема 2:

Если сервер и клиент находятся в одной сети (здесь через маршрутизатор)тогда они также не могут соединиться с той же самой ошибкой выше.Я выполнил переадресацию портов (здесь: 5555) с моим маршрутизатором и межсетевым экраном и защитником, установленным в положение «Выкл.» Как на клиенте, так и на сервере.

Что мне не хватает. Пожалуйста, просмотрите !!

  • Присоединение фрагмента кода для сервера :

        import java.net.*;
        import java.io.*;
    
    
        class ServerSideConnection{
    
        public static void main(String args[]){
    
        try{
            while(true){
                ServerSocket socket = new ServerSocket(5555);
                Socket serverinput = socket.accept();
                Mutithrd_excutn mutithrd_excutn_obj = new Mutithrd_excutn(serverinput);
                mutithrd_excutn_obj.start();
                socket.close();
            }   
        }catch(IOException e){
    
        }
    
        }
    }
    
    
    
    
        import java.net.*;
        import java.io.*;
    
        class Mutithrd_excutn extends Thread{
    
    
    
        public Socket serverinput;
        public Mutithrd_excutn(Socket serverinput){ 
    
            this.serverinput = serverinput;
    
        }   
    
        public void run(){
                try{
    
                BufferedReader br = new BufferedReader(new InputStreamReader(serverinput.getInputStream()));
                PrintWriter pw = new PrintWriter(serverinput.getOutputStream());
                BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in));
    
                String str_client = "";
                String str_server = "";
                while(true){
    
                    str_client = br.readLine();
                    System.out.println("Client : " + str_client);
    
                    if(str_client.equals("stop")){
    
                        return;
                    }
                    str_server = br1.readLine();
                    pw.println(str_server);
                    pw.flush();
                }
    
    
    
                //serverinput.close();
                //socket.close();
            }catch(IOException e){
    
            }       
    
    
    
        }
    
    }   
    
  • Присоединение фрагмента кода для клиента (здесь на localhost явведите IP-адрес сервера):

    import java.io.*;
    import java.net.*;
    
    
    public class ClientSideConnection {
    
    public static void main(String[] args) {
    
        try {
    
            Socket s = new Socket("localhost",5555);
            PrintWriter pw = new PrintWriter(s.getOutputStream());
            BufferedReader br_client_input = new BufferedReader(new InputStreamReader(System.in));
            BufferedReader br_server_output = new BufferedReader(new InputStreamReader(s.getInputStream()));
    
            String str_client = "";
            String str_server = "";
            while(!str_client.equals("stop")) {
    
                str_client = br_client_input.readLine();
                pw.println(str_client);
                pw.flush();
                if(!str_client.equals("stop")) { 
                    str_server = br_server_output.readLine();
                    System.out.println("Server : " + str_server);
    
                }   
    
            }
            br_client_input.close();
            br_server_output.close();
            s.close();
        }catch(IOException e) {
    
        }
    
    }
    

    }

Также, пожалуйста, напишите в комментарии, если какой-либо пункт я мог пропустить, развиваяпроблема.

1 Ответ

0 голосов
/ 22 октября 2018

Если он работает в одной и той же сети, но не в разных сетях, я вижу следующие опции:

  • есть какой-то брандмауэр, блокирующий соединение
  • или порт, перенаправляющий васнастройка выполнена неправильно
  • или вы используете неверный целевой IP-адрес, то есть частный IP-адрес в целевой сети вместо общедоступного видимого IP-адреса с переадресации порта

К сожалению, вашВопрос не содержит достаточно подробностей для дальнейшего ограничения параметров, т.е. неизвестно, как именно выполняется переадресация портов и какой IP-адрес (внутренний или внешний) вы используете в качестве адреса сервера в своих тестах.

...