Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Socket closed exception [duplicate]

I wrote a simple server and client example as below .

Client :

  • Open a connection
  • Get outputstream , write to stream and close the output stream
  • Get inputstream and read from the stream. Getting exception at this point

    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);
    }
        }
    
        }
    

Client :

    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);
    }

}

}

Getting below socket closed exception in Client . Could you please let me know what would be the reason.

  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)
like image 969
Abhilash Avatar asked Oct 24 '13 04:10

Abhilash


People also ask

Why do we get socket closed exception?

Closed socket connection - The most common cause of SocketException is reading or writing from or to a closed socket connection. It can also occur when the connection is closed before all the data is read in the socket buffer. Slow network - A poor network connection might also cause a SocketException .

How do you throw a socket exception?

A SocketException is thrown by the Socket and Dns classes when an error occurs with the network. The parameterless constructor for the SocketException class sets the ErrorCode property to the last operating system socket error that occurred.

Is socket closed Python?

In Python, when a socket loses its connection to the host, the socket will be closed by the operating system, this will result in errors if you try to read or write to the socket stream, this at least gives you a way to detect the loss of connection.


1 Answers

java.net.SocketException socket is closed This exception means that you closed the socket, and then continued to try to use it.

os.close();

And you closed it here. Closing either the input or the output stream of a Socket closes the other stream and the Socket.

like image 122
Todd Jefferson Avatar answered Sep 19 '22 13:09

Todd Jefferson