socket.getOutputStream().flush() не делает нихуя
всё потому что SocketOutputStream является наследником FileOutputStream, который во flush() не делает нихуя
всё потому что они работают напрямую с файловым дескриптором и вызывают write(2), который не буферизует нихуя
на самом деле в сокете буферизует, но только если включен Nagle's algorithm a.k.a. TCP delay, который включен по умолчанию и выключается при помощи TCP_NODELAY