为什么socket不与ip连接而不是localhost?

时间:2016-05-24 17:31:42

标签: java sockets network-programming client-server ip-address

我正在尝试通过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地址。但我不知道为什么:(

3 个答案:

答案 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无法连接到服务器,则问题出在服务器或防火墙上。