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