我正在为非常简单的服务器编写一个非常简单的客户端。如果服务器未运行,则第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由Socket构造函数引发,并作为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行应该在调用套接字上的方法之前检查一下第一次尝试是否成功。