Java 为什么下面的代码会出现异常?

Java 为什么下面的代码会出现异常?,java,Java,客户端类 import java.io.PrintWriter; import java.net.Socket; public class Client { public static void main(String[] args) { try { System.out.println(" Starting Client "); Socket socket = new Socket ("lo

客户端类

import java.io.PrintWriter;
import java.net.Socket;

public class Client 
{
    public static void main(String[] args) 
    {
        try 
        {
            System.out.println(" Starting Client ");
            Socket socket = new Socket ("localhost",55555);
        PrintWriter printWriter = new PrintWriter(socket.getOutputStream(),true);
            printWriter.println("Hello from client");
            printWriter.println("Conected, Yes!");
            socket.close();// Changes as suggested by Jack
        } 
        catch (Exception e) 
        {
            System.out.println(e);
        }


    }
}
服务器类

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class Server 
{
    public static void main(String[] args)
    {
        System.out.println(" inside main ");
        try 
        {
            System.out.println("Starting Server");
            ServerSocket serverSocket= new ServerSocket(55555);
            Socket clientSocket = serverSocket.accept();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            String inputLine;
            while ((inputLine= bufferedReader.readLine())!=null) 
            System.out.println("Server Message:"+inputLine);

        } 
        catch (IOException e) 
        {
            System.out.println("IOException "+e);
        }
    }
}

Output:
Starting Server
Server Message:Hello from client
Server Message:Conected, Yes!
IOException java.net.SocketException: Connection reset
客户端和服务器java文件位于同一个包中。 在下面的代码中,什么会触发IOException? 这与Eclipse有关吗? 仅供参考,我正在使用Eclipse SDK 版本:4.2.2
内部版本id:M2013024-1200

问题是您的客户端打开一个
套接字,发送一些数据,然后退出程序,从而突然关闭连接


您应该从客户端调用
Socket
上的
close()
,通知服务器它将关闭套接字。

正如@Jack在他的回答中提到的,您需要在客户端应用程序退出之前关闭()套接字

套接字是可自动关闭的

使用可关闭资源的安全工作方式是在
try
块中创建:

public class Client {
    public static void main(String[] args) {
            System.out.println(" Starting Client ");
            try(Socket socket = new Socket("localhost", 55555)) {
                PrintWriter printWriter = new PrintWriter(socket.getOutputStream(), true);
                printWriter.println("Hello from client");
                printWriter.println("Conected, Yes!");
            } catch (IOException e) {
                e.printStackTrace();
            }
    }
}

退出时它将自动关闭(从“尝试”部分)。

您能打印例外的详细信息并添加到这里吗?在服务器端,而不是打印
“IOException”+e
do
“IOException”+e.getMessage()
您使用的是什么版本的JDK?很高兴提供帮助。您可以接受我的回答以关闭此主题。我看不到关闭此主题的选项。