1

I have a server A that uses Httpcore, HttpcoreNIO for HTTP communications. I have written a Simple Java Socket Server B to use as a backend.

public void run() {
        String expectedResponse = "HTTP/1.0 200 OK\r\nServer: testServer\r\n" +
                                  "Content-Type: text/html\r\n" +
                                  "Transfer-Encoding: chunked\r\n" +
                                  "Transfer-Encoding: chunked\r\n" +
                                  "\r\n" + "<HTML>\n" + "<!DOCTYPE HTML PUBLIC " +
                                  "\"-//W3C//DTD HTML 4.0 Transitional//EN\">\n" +
                                  "<HEAD>\n" + " <TITLE>Hello World</TITLE>\n" +
                                  "</HEAD>\n" + "\n" + "<BODY BGCOLOR=\"#FDF5E6\">\n" +
                                  "<H1 ALIGN=\"CENTER\"> Hello</H1>\n" +
                                  "Sample text 123\n" +
                                  "test 123:\n" + "<PRE>";
        try {
            serverSocket = new ServerSocket(port);
            System.err.println("Server starting on port : " + port);
            while (true) {
                Socket clientSocket = serverSocket.accept();
                System.err.println("Client connected");
                BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                BufferedWriter out = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
                while (true) {
                    String s;
                    if ((s = in.readLine()) != null) {
                        System.out.println(s);
                        if (!s.isEmpty()) {
                            continue;
                        }
                    }
                    out.write(expectedOutput);
                    System.err.println("connection terminated");
                    out.close();
                    in.close();
                    clientSocket.close();
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

When server A receives a response from the backend B, I am getting the following exception.

Premature end of chunk coded message body: closing chunk expected

It seems that Httpcore is expecting a Closing chunk (or Zero-length chunk) before closing the connection.

Can someone let me know how to send this closing chunk from the above Java Simple Socket Server?

1 Answer 1

2

Transfer encoding chunked http header means that you are sending the http body in chunks. Each chunk starts with a "header" with the chunk size in bytes, and "/r/n", and then the chunk itself. Once you will do it, and you are done, you should send "0" and "/r/n".

BTW, is there a reason you are sending the "transfer encoding chunked" http header twice?

Sign up to request clarification or add additional context in comments.

1 Comment

Thanks a lot. Sending "0" and "/r/n" worked. Yes, sending the header twice was intentional. I was trying out this to write a test case where the backend returns duplicate headers :).

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.