java - Socket's PrintWriter doesn't send until closed -
i have client code looks like:
socket s = new socket(server.gethostname(), server.getport()); printwriter p = new printwriter(s.getoutputstream()); p.println(message); p.flush(); s.shutdownoutput(); bufferedreader br = new bufferedreader(new inputstreamreader(s.getinputstream())); string newline; stringbuffer response = new stringbuffer(); while((newline = br.readline()) != null) response.append(newline); system.out.println(response.tostring()); p.close(); br.close(); and server code looks like:
bufferedreader br = new bufferedreader(new inputstreamreader(s.getinputstream())); string nextline; stringbuffer request = new stringbuffer(); system.out.println("starting read...."); string nextline; while((nextline = br.readline()) != null){ system.out.println(nextline); request.append(nextline); } system.out.println("message recived!!"); system.out.println("request: " + request); printwriter p = new printwriter(s.getoutputstream()); p.println("hello, fileclient!"); system.out.println("message sent!!"); p.close(); br.close(); before put line s.shutdowninput() server code hang @ br.readline(). way managed fix close printwriter how, either through p.close() or through current way doesn't shutdown socket closing printwriter through p.close() does. after that, interaction between client , server perfect.
why printwriter or bufferedreader not send/receive until printwriter closed somehow?
it doesn't have printwriter. application protocol error on part.
the server looping reading lines until end of stream.
the client sending 1 line , not closing socket, no end-of-stream got sent (until added shutdown).
the server responding.
the client reading.
so client doesn't read until server gets out of loop, , server doesn't out of loop because client reading not closing.
so make mind. server should read 1 line.
Comments
Post a Comment