8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

java.net.ConnectException:连接被拒绝

Javier Martinez Barriga 2月前

126 0

我正在尝试实现 TCP 连接,从服务器端看一切正常,但是当我运行客户端程序(从客户端计算机)时出现以下错误:java.net.ConnectException:

我正在尝试实现 TCP 连接,从服务器端看一切正常,但是当我运行客户端程序(从客户端计算机)时出现以下错误:

java.net.ConnectException: Connection refused
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
        at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432)
        at java.net.Socket.connect(Socket.java:529)
        at java.net.Socket.connect(Socket.java:478)
        at java.net.Socket.<init>(Socket.java:375)
        at java.net.Socket.<init>(Socket.java:189)
        at TCPClient.main(TCPClient.java:13)

我尝试更改套接字号码(以防它正在使用中),但无济于事,有人知道是什么导致了这个错误以及如何修复它吗?

服务器代码:

//TCPServer.java

import java.io.*;
import java.net.*;

class TCPServer {
    public static void main(String argv[]) throws Exception {
        String fromclient;
        String toclient;

        ServerSocket Server = new ServerSocket(5000);

        System.out.println("TCPServer Waiting for client on port 5000");

        while (true) {
            Socket connected = Server.accept();
            System.out.println(" THE CLIENT" + " " + connected.getInetAddress()
                    + ":" + connected.getPort() + " IS CONNECTED ");

            BufferedReader inFromUser = new BufferedReader(
                    new InputStreamReader(System.in));

            BufferedReader inFromClient = new BufferedReader(
                    new InputStreamReader(connected.getInputStream()));

            PrintWriter outToClient = new PrintWriter(
                    connected.getOutputStream(), true);

            while (true) {

                System.out.println("SEND(Type Q or q to Quit):");
                toclient = inFromUser.readLine();

                if (toclient.equals("q") || toclient.equals("Q")) {
                    outToClient.println(toclient);
                    connected.close();
                    break;
                } else {
                    outToClient.println(toclient);
                }

                fromclient = inFromClient.readLine();

                if (fromclient.equals("q") || fromclient.equals("Q")) {
                    connected.close();
                    break;
                } else {
                    System.out.println("RECIEVED:" + fromclient);
                }

            }

        }
    }
}

客户端代码:

//TCPClient.java

import java.io.*;
import java.net.*;

class TCPClient {
    public static void main(String argv[]) throws Exception {
        String FromServer;
        String ToServer;

        Socket clientSocket = new Socket("localhost", 5000);

        BufferedReader inFromUser = new BufferedReader(new InputStreamReader(
                System.in));

        PrintWriter outToServer = new PrintWriter(
                clientSocket.getOutputStream(), true);

        BufferedReader inFromServer = new BufferedReader(new InputStreamReader(
                clientSocket.getInputStream()));

        while (true) {

            FromServer = inFromServer.readLine();

            if (FromServer.equals("q") || FromServer.equals("Q")) {
                clientSocket.close();
                break;
            } else {
                System.out.println("RECIEVED:" + FromServer);
                System.out.println("SEND(Type Q or q to Quit):");

                ToServer = inFromUser.readLine();

                if (ToServer.equals("Q") || ToServer.equals("q")) {
                    outToServer.println(ToServer);
                    clientSocket.close();
                    break;
                } else {
                    outToServer.println(ToServer);
                }
            }
        }
    }
}
帖子版权声明 1、本帖标题:java.net.ConnectException:连接被拒绝
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Javier Martinez Barriga在本站《sockets》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我尝试使用 localhost 进行远程连接,脸都肿了。这是我第一次尝试 TCP >.< 我如何让它远程工作?

  • 请记住,您中间可能也有一些“裸机”硬件防火墙......如果客户端和服务器位于同一个盒子里,它可以工作吗?

  • 此异常意味着没有服务监听您尝试连接的 IP /端口:

    • 您正在尝试连接到错误的 IP/主机或端口。
    • 您尚未启动服务器。
    • 您的服务器未监听连接。
    • 在 Windows 服务器上,监听积压队列已满。
  • Eezo 2月前 0 只看Ta
    引用 5

    只是为了明确一点 - “Java 核心很好”。唯一的问题是我们忽略了一些问题……(服务器状态、IP 地址、端口、互联网连接 - 本地 IP 必须位于同一路由器上,等等)

  • Collin,你说的“服务器不等待接受连接”到底是什么意思?人们都在重复这句话,好像它意味着什么似的。

  • 在我的情况下,我有四个 Gennymotion 模拟器在运行,我试图在 Galaxy 选项卡上加载应用程序,但出现了这个错误。在从好友 WEB 上读了很多资料后,我关闭了所有模拟器和 Eclipse,在任务管理器中关闭了 ADP,然后重新启动了 Eclipse,一切都开始正常工作。我认为,当你有多个模拟器在运行,然后你尝试连接设备时,根据我的经验,ADB 会变得很疯狂。这些只是我的个人看法... :)

  • 我在尝试连接到 soap 服务时收到此异常。java.util.concurrent.ExecutionException:java.net.ConnectException:https://services.xxxxxxxxx.com/xxxxxxxxxv2/Service.svc/soap。这不是连接被拒绝或超时。它只是打印出 API 的地址并崩溃。我不知道是什么原因造成的。

  • g0rb 2月前 0 只看Ta
    引用 9

    我会检查:

    • 您尝试连接的主机名和端口
    • 服务器端已成功开始正确监听
    • 没有防火墙阻止连接

    最简单的起点可能是尝试使用 telnet 或 Putty 从客户端计算机手动连接。如果成功,则问题出在您的客户端代码中。如果没有成功,您需要找出 原因 。可能 Wireshark 会在这方面为您提供帮助。

  • 我有时会遇到此异常。这种情况持续一段时间。它会立即抛出此异常。然后一切都恢复正常。我的服务器中有防火墙。但我添加了入站规则以允许端口 8080 上的传入连接。有时会忽略该规则吗?

  • @Ashwin:实际上,这很难说 - 您需要确切地计算出数据传到了哪里。查看您的防火墙日志等。

  • @Nikhil:我没有资格回答这个问题,但我想任何有资格的人都需要更多信息才能帮助你。(首先,我们不知道你用的是什么防火墙……)

  • 引用 13

    我想补充一点,这是 我的经验 -

    \'我在 localhost ,并尝试 通过指定正确的 URL(例如) Android 模拟器 http://localhost/my_api/login.php 。但我收到了 连接被拒绝错误 \'

    需要注意的是 - 当我在电脑上打开浏览器并使用相同的 URL 时( http://localhost/my_api/login.php ) 我得到了正确的响应

    所以在我的案例中,问题 localhost 替换了 IP (因为您的服务器托管在您的机器上),这使得它可以从同一台 PC 上的模拟器访问。


    要获取本地机器的 IP,你可以 ipconfig 在 cmd 上使用命令,你将获得类似 192.68.xx.yyVoila 的 IPv4。这是你托管服务器的机器的 IP。使用它代替 localhost

    http://192.168.72.66/my_api/login.php


    注意 - 您无法从此计算机之外的任何节点访问此私有 IP。(如果需要,您可以使用 Ngnix)

  • 你必须将客户端套接字连接到远程 ServerSocket。而不是

    Socket clientSocket = new Socket("localhost", 5000);

    Socket clientSocket = new Socket(serverName, 5000);

    客户端必须连接到 serverName ,该名称应与实例化的框的名称或 IP 相匹配 ServerSocket (该名称必须可从客户端计算机访问)。顺便说一句:重要的不是名称,而是 IP 地址……

  • 我假设她是为了测试目的而在同一台机器上运行它们,这就是为什么使用 localhost 是可以的

  • @Aaron:她说如果客户端和服务器在同一台机器上运行它就可以工作(您可以在另一条评论中找到答案)。

  • “上面的行将套接字绑定到 localhost” 不,它没有,它将其绑定到 INADDR_ANY。这允许它通过任何 NIC 接受连接。OP 所做的已经是正确的。答案完全不正确。投反对票。

  • 引用 18

    @EJP:您对 ServerSocket 的说法是正确的,我修改了答案。尽管如此,clientSocket 仍会尝试连接到 localhost。

  • 当然,你必须先运行服务器,然后再运行客户端。先运行客户端,然后尝试连接服务器,这意味着当你启动服务器时,你什么也连接不了。

  • @user3308043 是的,这很明显,但对于一些新程序员来说并不是太明显(比如我 3 年前),所以我只是想与那些像我一样一无所知的人分享它。

返回
作者最近主题: