Search code examples
javasocketsexceptionserversocket

I get an unexpected error in Java Socket


I get the following error:

java.net.SocketException: Connection reset
  at java.net.SocketInputStream.read(SocketInputStream.java:189)
  at java.net.SocketInputStream.read(SocketInputStream.java:121)
  at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
  at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
  at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
  at java.io.InputStreamReader.read(InputStreamReader.java:184)
  at java.io.BufferedReader.fill(BufferedReader.java:161)
  at java.io.BufferedReader.readLine(BufferedReader.java:324)
  at java.io.BufferedReader.readLine(BufferedReader.java:389)
  at test.SocketTest.main(SocketTest.java:26)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:483)
  at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)

I don't know why I get it. Any idea?

I'm using this code:

for Client:

public class SocketTest {

public static void main(String[] args) {
    try {
        Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 5000);
        ObjectOutputStream outputStream = new ObjectOutputStream(socket.getOutputStream());
        BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        Request request = new Request();
        request.setInputId("user_1233423333");
        request.setOperation(3);
        outputStream.writeObject(request);
        outputStream.flush();
        String s;
        while ((s = reader.readLine()) != null) {
            System.out.println(s);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

}

and for the Server:

public class ServerSocketTest {

public static void main(String[] args) {
    try {
        ServerSocket serverSocket = new ServerSocket(5000);
        Socket socket = serverSocket.accept();
        ObjectInputStream inputStream = new ObjectInputStream(socket.getInputStream());
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        Request request = (Request) inputStream.readObject();
        System.out.println(request.getInputId());
        System.out.println(request.getOperation());
        writer.write("ok");
        writer.flush();
    } catch (IOException | ClassNotFoundException e) {
        e.printStackTrace();
    }
}

}

I think that this codes should work, but I don't know Why I get this error. Any idea, guys?

EDIT:

OS = windows 8.1 64-bit

I've tested on my Ubuntu and everything was ok.


Solution

  • Your test program is exiting without closing the socket. This causes the connection to be reset (TCP RST) instead of issuing an orderly close (TCP FIN). On some platforms.

    Another problem is that you are reading lines in the client, but you aren't sending a line. You need to send a line terminator.