有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在另一个网络上运行socket客户端时,java连接超时

我的问题是,当我在另一个网络(我的手机热点)上运行客户端时,会出现“java.net.ConnectException:Connection-denied:connect”异常。它在同一个网络上运行良好,我认为这是防火墙的问题,但即使对每种类型的网络启用Eclipse并禁用防火墙,它仍然无法工作

客户:

import java.io.*; 
import java.net.*;  
public class MyClient {  
    public static void main(String[] args) {  
        try{      
            Socket s=new Socket("192.168.0.36",6666);  
            DataOutputStream dout=new DataOutputStream(s.getOutputStream());  
            dout.writeUTF("Hello Server");  
            dout.flush();  
            dout.close();  
            s.close();  
        }catch(Exception e){System.out.println(e);}  
    }  
}

服务器:

import java.io.*;  
import java.net.*;  
public class MyServer {  
    public static void main(String[] args){  
        try{  
            System.out.println("Server Running");
            ServerSocket ss=new ServerSocket(6666);  
            Socket s=ss.accept();   
            DataInputStream dis=new DataInputStream(s.getInputStream());  
            String str=(String)dis.readUTF();  
            System.out.println("message= "+str);  
            ss.close();  
        }catch(Exception e){System.out.println(e);}  
    }  
} 

共 (1) 个答案

  1. # 1 楼答案

    您需要使用全局IP地址而不是本地IP地址。目前,“192.168.0.36”在您的本地网络上。如果您希望从其他网络访问它,则需要使用您的全局IP地址。有一些工具意味着您不需要记住全局IP地址(或给出它),例如NO-IPMY-IP也会告诉你你的全球IP地址

    另一方面,您可能还需要在路由器上连接转发端口6666。只需看看这一点,上述方法本身是行不通的。你可能需要同时做这两件事。根据路由器制造商的不同,在谷歌上很容易获得端口转发信息

    希望这有帮助