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



>我正在尝试在连接到网络的机器(服务器((例如通过网络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){
    }       
    
    }
    }   
    
  • 客户端附加代码片段(我正在输入本地主机 服务器机器的 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) {
    }
    }
    

    }

另外,如果我可能错过了阐述问题的任何一点,请写下评论。

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

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

不幸的是,您的问题不包含足够的细节来进一步限制选项,即不知道端口转发是如何完成的,以及您在测试中使用哪个 IP 地址(内部或外部(作为服务器地址。

相关内容

  • 没有找到相关文章

最新更新