So I now have the Java client talking happily to the Python server after much debugging (and flushing of stdout and subclassing of HTTPServer). I have the RPC interop bash script running for every combination of Java and Python except the Python client talking to the Java server. This bug is a fun one, as have been the previous two.
When the Java server is run as a foreground or background process in a separate terminal from the Python client, everything is fine. However, when the Java server is run as a background process in the same terminal as the Python client, the first handshake happens fine, but the server sends the client a block with a correct block length (as if sending the correct response) but empty block content (mysteriously). I've used Wireshark to capture the exchange between the Java server and the Python client and attached it to this issue.
Any guidance on how to debug the Java server to figure out how the content of the second message is not hitting the wire would be much appreciated.