Firstly: as Rahul says, what do you get on the client side?
If it does not fail, then you have to assume that there are ways in which flush() can be called that does not cause the stream to be committed. The most likely way that I can think of is that flush() is a request to the stream to flush but does not actually cause the data to be sent itself, like calling repaint() in AWT.
If you make 400 repaint() calls, it will not necessarily result in paint() being called 400 times. When
Java gets a chance it will call paint(). If 50 repaint() requests are waiting you'll only get one paint().
Back to streams, if the stream is managed in a separate
thread then this must certainly be the case, otherwise you run the risk of threads blocking on a failed or delayed write.
I'd try flush() then wait for a second or so after it and see if that changes things.