套接字关闭异常

Abh*_*ash 8 java sockets exception bufferedreader

我写了一个简单的服务器和客户端示例如下.

客户:

  • 打开连接
  • 获取输出流,写入流并关闭输出流
  • 获取输入流并从流中读取.此时获得例外

    public class DateServer {
    public static void main(String[] args) throws InterruptedException {
    ServerSocket serverSocket = null;
    Socket client = null;
    try {
        serverSocket = new ServerSocket(6013);
        while (true) {
            client = serverSocket.accept();
            OutputStream outputStream = client.getOutputStream();
            InputStream inputStream = client.getInputStream();
    
            System.out.println("" + outputStream + "-" + inputStream);
    
            BufferedReader bufferedReader = new BufferedReader(
                    new InputStreamReader(inputStream));
    
            String line = null;
            while ((line = bufferedReader.readLine()) != null) {
                System.out
                        .println("Message recieved from client ::" + line);
            }
    
            PrintWriter printWriter = new PrintWriter(outputStream, true);
    
            printWriter.println(new java.util.Date().toString());
    
            client.close();
        }
    } catch (IOException exception) {
        exception.printStackTrace();
        System.err.println(exception);
    }
        }
    
        }
    
    Run Code Online (Sandbox Code Playgroud)

客户:

    public class DateClient {

public static void main(String[] args) throws UnknownHostException,
        IOException, InterruptedException {
    Socket sock = new Socket("127.0.0.1", 6013);
    OutputStream outputStream = sock.getOutputStream();
    InputStream inputStream = sock.getInputStream();

    System.out.println("" + outputStream + "-" + inputStream);

    PrintWriter printWriter = new PrintWriter(outputStream, true);
    printWriter.println("Hi Server");

    outputStream.close();

    System.out.println(sock.isConnected());

    BufferedReader bufferedReader = new BufferedReader(
            new InputStreamReader(inputStream));
    String line;
    while ((line = bufferedReader.readLine()) != null) { // Exception 
        System.out.println(line);
    }

}

}
Run Code Online (Sandbox Code Playgroud)

在客户端中获取套接字关闭异常.能告诉我原因是什么吗?

  Exception in thread "main" java.net.SocketException: Socket closed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:146)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:282)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:324)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:176)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:153)
at java.io.BufferedReader.readLine(BufferedReader.java:316)
at java.io.BufferedReader.readLine(BufferedReader.java:379)
at edu.iub.cs.httpserver.DateClient.main(DateClient.java:32)
Run Code Online (Sandbox Code Playgroud)

小智 10

java.net.SocketException套接字已关闭此异常表示您关闭了套接字,然后继续尝试使用它.

os.close();
Run Code Online (Sandbox Code Playgroud)

你在这里关闭它.关闭Socket的输入或输出流将关闭另一个流和Socket.

  • @Abhilash不相关.`isConnected()`告诉你是否连接了`Socket.***Not***它是否已连接.(`isConnected()`和`isClosed()`方法是关于*socket的状态,*不是连接的状态.) (3认同)
  • 但是`System.out.println(sock.isConnected());`打印正确 (2认同)