我正在尝试通过ip地址连接到服务器,但它不起作用。两者都在同一台机器上,当我将ipAddress更改为localhost时,它可以工作。这是什么原因?
try {
String ipAddress = "46.155.17.100";
int port = 8082;
// Create a socket to connect to the server
socket = new Socket(ipAddress, port);
toServer = new ObjectOutputStream(socket.getOutputStream());
fromServer = new ObjectInputStream(socket.getInputStream());
} catch (Exception ex) {
connected = false;
try {
if (socket != null) {
socket.close();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
EDİT:当我将连接从WiFi更改为网线时,套接字连接了新的IP地址。但我不知道为什么:(
答案 0 :(得分:2)
我正在尝试通过ip地址连接到服务器,但它不起作用。 两者都在同一台机器上,当我将ipAddress更改为localhost时 有用。这是什么原因?
原因是因为服务器代码中的ServerSocket没有绑定到您尝试从客户端连接的IP地址。因此,在这种情况下,ServerSocket绑定到默认的环回地址,即localhost
OR 127.0.0.1
。
您需要编辑服务器端代码,以便在构造函数中绑定ServerSocket的IP地址和IP(46.155.17.100
),或者稍后将其绑定。这将通过使用以下内容替换ServerSocket初始化来完成:
// int port = 4444, backlog = 5;
String bindaddr = "46.155.17.100";
ServerSocket server = new ServerSocket(port,backlog,InetAddress.getByName(bindAddr));
// your server-side code continues below.
答案 1 :(得分:-1)
网络基础知识(在一个要点中):当使用IP地址时,您的计算机将查看IP是否与其自己的NIC在同一子网上。如果不是,计算机将在确定地址的位置时推迟路由到默认网关(路由器)。因此,当您使用公共地址时,您将从您的计算机向您的路由器发送流量,然后再将其发送到ISP /服务提供商,在那里它只会被路由回您的路由器IP,因此您的路由器需要打开才能获得流量端口8082.使用localhost或127.0.0.1告诉您的计算机将其路由到自身。
In Steps:
Destination "46.155.17.100"
Computer is this in my local network?(My own network is 192.168.0.0/24) (My Address is 192.168.0.X)
- This is not on my network, let me send it to my default gateway
Computer sends data to gateway -> 192.168.0.1 (router)
The Router says, is this on any network I know of?
- Nope i do not own 46.155.17.100, -> Your router send data to its own default gateway which should be the (ISP Router)
ISP Router says hey i know where this is -> sends it back to your router.
答案 2 :(得分:-2)
首先尝试" telnet 46.155.17.100 8802"。如果telnet无法连接到服务器,则问题出在服务器或防火墙上。