在另一个网络上运行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 楼答案
您需要使用全局IP地址而不是本地IP地址。目前,“192.168.0.36”在您的本地网络上。如果您希望从其他网络访问它,则需要使用您的全局IP地址。有一些工具意味着您不需要记住全局IP地址(或给出它),例如NO-IPMY-IP也会告诉你你的全球IP地址
另一方面,您可能还需要在路由器上连接转发端口6666。只需看看这一点,上述方法本身是行不通的。你可能需要同时做这两件事。根据路由器制造商的不同,在谷歌上很容易获得端口转发信息
希望这有帮助