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

java.net.ConnectException:连接被拒绝

Javier Martinez Barriga 2月前

131 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)
  • MSH 2月前 0 只看Ta
    引用 2

    如果您使用 intellij 并遇到相同的错误,请检查是否在某处启用了方法断点。它对我有用 :)

  • 在我的例子中,服务器用 c# 编写,客户端用 Java 编写,我通过 在服务器中将 localhost [::1] ”来解决这个问题。我不知道为什么会这样,但在客户端中指定“localhost”不起作用。据说它们在很多方面都是同义词,但显然不是 100% 匹配。希望它能帮助人们避免头痛。

  • 不关闭客户端套接字不会导致连接被拒绝。如果连接被拒绝,则不会有客户端套接字需要关闭。

  • braX 2月前 0 只看Ta
    引用 5

    我遇到了同样的问题,问题是我没有关闭套接字对象。使用 socket.close(); 后问题解决了。此代码对我有用。

    客户端演示.java

    public class ClientDemo {
        public static void main(String[] args) throws UnknownHostException,
                IOException {
            Socket socket = new Socket("127.0.0.1", 55286);
            OutputStreamWriter os = new OutputStreamWriter(socket.getOutputStream());
            os.write("Santosh Karna");
            os.flush();
            socket.close();
        }
    }
    

    和 ServerDemo.java

    public class ServerDemo {
        public static void main(String[] args) throws IOException {
            System.out.println("server is started");
            ServerSocket serverSocket= new ServerSocket(55286);
            System.out.println("server is waiting");
            Socket socket=serverSocket.accept();
            System.out.println("Client connected");
            BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String str=reader.readLine();
            System.out.println("Client data: "+str);
            socket.close();
            serverSocket.close();
    
        }
    }
    
  • 对于那些遇到相同问题并使用 Spring 框架的人,我建议检查 http 连接提供程序配置。我的意思是 RestTemplate , WebClient ,等等。

    就我而言,配置的 RestTemplate 存在问题(这只是一个例子):

    public RestTemplate localRestTemplate() {
       Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("localhost", <some port>));
       SimpleClientHttpRequestFactory clientHttpReq = new SimpleClientHttpRequestFactory();
       clientHttpReq.setProxy(proxy);
       return new RestTemplate(clientHttpReq);
    }
    

    我只是将配置简化为:

    public RestTemplate restTemplate() {
       return new RestTemplate(new SimpleClientHttpRequestFactory());
    }
    

    并且它开始正常工作。

  • 当我尝试通过 ssh 隧道连接到 postgresql 数据库时,我在 SQuirreLSQL 中看到了相同的错误消息“java.net.ConnectException:连接被拒绝”。

    开启隧道的示例:

    Squirrel 与 Postgresql 中的错误示例:

    enter image description here

    它试图连接到错误的端口。输入正确的端口后,进程执行成功。

    查看更多修复此错误的选项: https://.com/a/6876306/5857023

  • 我收到此错误是因为我关闭了 ServerSocket 一个尝试接受其中客户端数量的 for 循环(我没有完成接受所有客户端)

    所以要小心关闭你的套接字

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

    Expose daemon on tcp://localhost:2375 without TLS 附近打勾 docker (在任务栏右侧,右键单击 docker ,选择 setting )

  • 在我的例子中,我给了套接字服务器的名称(在我的例子中是 \'raspberrypi\'),但实际上却是一个 IPv4 地址,或者说,IPv6 被破坏了(名称解析为 IPv6)

  • 引用 11

    希望我的经验对某些人有用。我遇到了同样的异常堆栈跟踪问题,但我不知道问题是什么。我尝试连接的数据库服务器正在运行,端口已打开并正在接受连接。

    问题出在互联网连接上。我使用的互联网连接无法连接到相应的服务器。当我更改连接详细信息时,问题得到了解决。

  • 这拯救了我,但由于 vernemq 不能用 apt-get 安装,有些人需要这个链接:vernemq.com/docs/installation/debian_and_ubuntu.html

  • 我遇到了与名为 vernemq 的 Mqtt 代理相同的问题,但通过添加以下内容解决了该问题。

    1. $ sudo vmq-admin listener show

    显示 vernemq 允许的 IP 和端口列表

    1. $ sudo vmq-admin listener start port=1885 -a 0.0.0.0 --mountpoint /appname --nr_of_acceptors=10 --max_connections=20000

    添加任何 IP 和新端口。现在您应该能够毫无问题地连接。

    希望它能解决你的问题。

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

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

  • 引用 16

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

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

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

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

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

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

    Socket clientSocket = new Socket(serverName, 5000);

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

返回
作者最近主题: