繁体   English   中英

Java 套接字连接被拒绝错误

[英]Java Sockets Connection refused error

我正在尝试使用套接字连接到服务器。 我在 Ubuntu 上使用 Intellij IDEA 和一个 JAVAFX 项目。 我目前正面临这个错误:

“引起:java.net.ConnectException:连接被拒绝”

此错误指向的代码是:

Socket serverSocket = new Socket("127.0.0.1", 8080);
        ConnectionHandler handler = new ConnectionHandler(serverSocket);
        String[] dirs = handler.receiveDirs();
        System.out.println(dirs[0]);

如果有人可以帮助我并告诉我可能存在的问题,请让我知道任何可能的修复! 谢谢!

出现此错误的可能原因是:

  • 您没有正在运行的服务器程序。
  • 您先运行客户端程序,然后再运行服务器应用程序。
  • 您的端口可能错误或您的IP错误(假设您的服务器不在本地主机中)。
  • 服务器可能暂时不希望建立连接。

安全措施检查:

  • 尝试先禁用防火墙。

您的本地主机的端口8080上没有任何要运行的套接字连接。 您可以在该端口上运行诸如Tomcat之类的服务器,然后一切正常。

这是一个独立的示例,该示例将服务器套接字设置为在本地运行(它所做的只是来自客户端的回显输入)。 输出将为“ hello,jewelsea”。

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class ConnectToServer {
    public static void main(String[] args) throws IOException, InterruptedException {
        // server code.
        ServerSocket serverSocket = new ServerSocket(8082);
        Thread serverThread = new Thread(() -> {
            while(true) {
                try {
                    Socket connection = serverSocket.accept();

                    try (
                        BufferedReader serverReader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                        Writer serverWriter = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream()));
                    ) {
                        serverWriter.write("hello, " + serverReader.readLine() + "\n");
                        serverWriter.flush();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (Throwable t) {
                    t.printStackTrace();
                    throw t;
                }
            }
        });
        serverThread.setDaemon(true);
        serverThread.start();

        // client code.
        Socket clientSocket = new Socket("127.0.0.1", 8082);
        try (
            Writer clientWriter = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
            BufferedReader clientReader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        ) {
            clientWriter.write("jewelsea\n");
            clientWriter.flush();
            String response = clientReader.readLine();

            System.out.println(response);    
        }
    }
}

您可能不想直接使用套接字,而希望使用更高级的API,例如jax-rs

如果正确编写代码,则还需要控制连接的IP。 由于您的Wifi适配器具有公用IP地址,并且如果您正在使用该IP地址,您将收到一条消息,称为连接被拒绝,因为Wifi适配器将本地Wifi地址分配给该网络中的计算机。 但是,一些网络提供商也分配了公共Wifi。 坦白说,您可以尝试使用服务器的本地IP将客户端连接到服务器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM