Hi, My requirement is to write a server that is capable of holding long conversations with the client based on socket programming for Java. I'm using ServerSocket to create TCP sockets. The problem I am running into is that I am not able to do [read, write, read] sequence of operations reliably on my socket. Here is my [read, write, read] code:
1: int numBytesRead = socket.getInputStream().read(buffer); 2: System.out.println(numBytesRead); 3: socket.getOutputStream().write(new byte[] { 'a', 'b', 'c' }); 4: socket.getOutputStream().flush(); 5: numBytesRead = socket.getInputStream().read(buffer); 6: System.out.println(numBytesRead); On line 5 in this code, the read operation is NOT blocking and will return -1. After some testing, I concluded that after flushing output [line 4], the input stream will not block anymore. However, if I comment out line 4, the read operation will block again, and will continue to block on subsequent attempts for read before any output flush. What I want is to implement persistent connections which enable me to read client's input, respond, and repeat without closing the socket. I believe this possible with Tomcat but I can't figure out how Http11Processor implements it. Can anyone give me any ideas as to WHY this is the behaviour to be expected in my code? Why is that a output flush causes my input stream to behave unexpectedly? And how do I correctly implement read, write, read for support persistent connections? Surely this can be done right? I only hope so. -- Hung Tang