Given a successful Socket connection, my Java server does this:
out = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
out.write("HELLO");
out.newLine();
out.flush();
And this is what my C# client does:
TcpClient tcpClient         = new TcpClient("localhost", port);
tcpClient.ReceiveTimeout    = 10000;
NetworkStream networkStream = tcpClient.GetStream();
BinaryReader reader = new BinaryReader(networkStream);
reader.ReadString(); // <--- Hangs
tcpClient.Close();
It will hang on ReadString() and time out eventually. If you change it to
reader.Read(); // <--- Returns 72
Returns 72 which I assume corresponds to the H. So apparently the Java server is indeed sending the message - why is ReadString() hanging?
 
    