Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么套接字不与ip而不是本地主机连接?_Java_Sockets_Network Programming_Client Server_Ip Address - Fatal编程技术网

Java 为什么套接字不与ip而不是本地主机连接?

Java 为什么套接字不与ip而不是本地主机连接?,java,sockets,network-programming,client-server,ip-address,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

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

首先尝试“telnet 46.155.17.100 8802”。如果telnet无法连接到服务器,问题在于服务器或防火墙。

网络基础(要点):当使用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.
我正在尝试通过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;
}
原因是服务器代码中的ServerSocket未绑定到您试图从客户端连接的IP地址。因此,在这种情况下,ServerSocket绑定到默认环回地址,即
localhost
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.

检查您的防火墙,尝试ping此ip地址这很可能是由于防火墙或ip地址不正确而导致的问题。您的计算机是否接受传入连接?我的计算机不接受。请在本地计算机上显示您的计算机网络配置正在工作,然后不工作。这样我们就可以看到您的地址。这是一篇格式良好的文章,而且这很有趣。所以,你可以在这里投票。别忘了接受解决你问题的答案,点击左边的管道图标。他在哪里或他如何绑定地址都无关紧要。除非他没有使用私有IP或该地址有静态路由,否则该地址在他的内部网络中是不可路由的。@Underbalanced-Y你也不确定他是否连接到那个网络。我知道,因为我见过很多新手反复问这个类似的问题。这可能是OP的公共广播!当心,一旦我的话变正确,删除你的否决票(OP接受答案)。我也同意这可能是OPs的公共广播。实际上,他的详细信息是缺乏的。如果他在一个具有不同子网的LAN上。那么他将如何绑定到他的路由器公共广播?@欠平衡-好吧,你不应该按照你的意愿假设一切。谁知道,我提到的可能是OP的情况!添加此答案显示你不知道SO的回答方式。OP不是在问网络的基本知识,他是在问代码中的错误!!!所以这不是一个理论上的网络堆栈交换,它是一个与编程相关的网站。你需要在相关代码中回答OP的问题,这个答案几乎没有触及!