BufferReader stucks when using read()

Viewed 43

I have developed a small java client that suppose to communicate with a tool installed on unix-server. I'm working with Socket first time so could do something wrong. I am also limited to Java 6.

In brief code looks like this

I use Socket to establish connection.

Socket socket = new Socket();
SocketAddress socketAddress = new InetSocketAddress(endpoint, port);
socket.connect(socketAddress, 5000);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

Here is how I send message

out.println("Hello");
out.flush();

And here is how I read response

String res = "";
int letter;
while(letter = in.read() != -1) {
    char c = (char) letter;
    res += c;
}

F.x. If I send a message "Hello", I will receive answers with 2 lines (see example below)

> Hi there
> My name is Robot

The things stuck when I read next character after "Robot\n", I expected that in.read() != -1 will be true and thus it will stop itself, but that is not a case and instead everything just stuck.

What could be the reason to this and how to solve? Thanks.

Please let me know if I need to provide more information.

1 Answers

I had to close my output writer before reading from it, otherwise it blocks.

if (!socket.isOutputShutdown()) {
    socket.shutdownOutput();
}

The answer came from a person who later deleted own answer :-/

Related