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套接字客户端,是什么引发了这个ConnectException?_Java_Sockets_Connectexception - Fatal编程技术网

简单java套接字客户端,是什么引发了这个ConnectException?

简单java套接字客户端,是什么引发了这个ConnectException?,java,sockets,connectexception,Java,Sockets,Connectexception,我正在为我的非常简单的服务器编写一个非常简单的客户端。第17行在运行时抛出一个ConnectException,如果服务器没有运行,我不知道为什么。我已经查看了Socket构造函数和getInputStream()的文档,但它们都没有抛出ConnectException。我查看了CE的文档,它显示“试图将套接字连接到远程地址和端口时发生错误的信号。通常,连接被远程拒绝(例如,没有进程正在侦听远程地址/端口)。”这是事实,服务器没有运行,但我不知道如何知道这一点,除了尝试和错误,为什么它不在Soc

我正在为我的非常简单的服务器编写一个非常简单的客户端。第17行在运行时抛出一个ConnectException,如果服务器没有运行,我不知道为什么。我已经查看了Socket构造函数和getInputStream()的文档,但它们都没有抛出ConnectException。我查看了CE的文档,它显示“试图将套接字连接到远程地址和端口时发生错误的信号。通常,连接被远程拒绝(例如,没有进程正在侦听远程地址/端口)。”这是事实,服务器没有运行,但我不知道如何知道这一点,除了尝试和错误,为什么它不在Socket的文档中

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

public class ClientLesson {

    //declare vars
    static Socket socket;
    static BufferedReader inputReader;

    public static void main(String[] args) throws IOException {
        try {
            socket = new Socket("Lithium", 55555);
        } catch (IOException ioe) {
            System.out.println(ioe.toString());
        }
        try {
   this is the problem --> inputReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        } catch (IOException ioe) {
            System.out.print("couldn't get I/O stream");
            ioe.printStackTrace();
        }  
        String fromServer;
        while ((fromServer = inputReader.readLine()) != null) {
            System.out.println(fromServer);
        }
        inputReader.close();
        socket.close();

    }
}

我刚刚意识到问题是完全不同的…ConnectException由套接字构造函数抛出,并作为IOException处理,因为CE是一个子类型,这对我来说现在是有意义的。我在第17行得到一个NPE,但我被终端输出搞糊涂了,这里是:

nexus@Lithium ~/Desktop/Java Workspace/networking $ java ClientLesson 
java.net.ConnectException: Connection refused
Exception in thread "main" java.lang.NullPointerException
    at ClientLesson.main(ClientLesson.java:17)

我不明白这两个问题是分开的。现在我知道问题出在第17行,在调用套接字上的方法之前,应该检查第一次尝试是否成功。

连接被拒绝意味着在您尝试连接的端口上没有运行服务。这是配置问题或服务器端问题。当您收到异常时,记录或打印其消息。不要只是编造一个你自己的故事来掩盖真正的问题。如果您将try-catch块正确嵌套,那么问题一开始就不会出现。目前,尽管存在连接异常,您仍允许异常继续。@PeterLawrey-问题在于客户机代码,OP表示只有在服务器未运行且尝试连接时才会出现问题,ie我试图连接到一个没有服务的端口,并优雅地处理错误。@EJP-这是打印异常消息的好建议,我已经开始这样做了。实际上,这正是让我困惑的一开始,我收到了“Connection Rejected”(连接被拒绝)消息,这是ex.toString()的结果,但我没有意识到程序继续运行,后来遇到了第二个错误,即NPE。在println(例如toString())调用之后,我在一些catch块中放置了一个System.exit()。你能给出一个建议更好地安排试块/嵌套的答案吗?这样我就能理解你的意思了。我[在这里][1]给出了一个可能有用的答案。[1]: