套接字连接程序(TCP / IP)适用于本地主机/公用网络,但不适用于其他IP

时间:2018-10-21 21:36:02

标签: java sockets networking router tcp-ip

我试图在连接到网络(例如,通过网络X的热点)的机器(服务器)和连接到网络Y的热点的另一台(客户端)之间建立连接。

问题1:

  

如果Server和client(可以是   多个)连接到同一网络(例如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){
    
            }       
    
    
    
        }
    
    }   
    
  • 为客户端附加代码段(在本地主机中,我正在输入 服务器计算机的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 :(得分:0)

如果它在同一网络中工作,但不在不同网络之间工作,那么我会看到以下选项:

  • 有一些防火墙阻止了连接
  • 或者您设置的端口转发错误
  • 或者您使用了错误的目标IP,即目标网络中的专用IP而非端口转发中的公共可见IP

不幸的是,您的问题所包含的详细信息不足以进一步限制选项,即,未知端口转发是如何完成的,以及在测试中将哪个IP地址用作服务器地址(内部或外部)。