new ObjectInputStream() blocks
You need to create the ObjectOutputStream
before the ObjectInputStream
at both sides of the connection(!). When the ObjectInputStream
is created, it tries to read the object stream header from the InputStream
. So if the ObjectOutputStream
on the other side hasn't been created yet there is no object stream header to read, and it will block indefinitely.
Or phrased differently: If both sides first construct the ObjectInputStream
, both will block trying to read the object stream header, which won't be written until the ObjectOutputStream
has been created (on the other side of the line); which will never happen because both sides are blocked in the constructor of ObjectInputStream
.
This can be inferred from the Javadoc of ObjectInputStream(InputStream in)
:
A serialization stream header is read from the stream and verified. This constructor will block until the corresponding ObjectOutputStream has written and flushed the header.
This is also described in section 3.6.2 of Fundamental networking in Java by Esmond Pitt.