简单的java socket客户端,抛出这个ConnectException是什么?

时间:2013-09-07 18:11:53

标签: java sockets connectexception

我正在为非常简单的服务器编写一个非常简单的客户端。如果服务器没有运行,第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();

    }
}

1 个答案:

答案 0 :(得分:1)

我刚刚意识到问题完全不同...... Socket构造函数抛出了ConnectException,并将其作为IOException处理,因为CE是一个子类型,现在对我来说很有意义。我在第17行得到了一个N​​PE,但我对终端输出感到困惑,这里是:

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行应该在调用套接字上的方法之前检查第一次尝试是否成功。