鉴于连接成功Socket
,我的Java服务器执行此操作:
out = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
out.write("HELLO");
out.newLine();
out.flush();
这就是我的C#客户端所做的事情:
TcpClient tcpClient = new TcpClient("localhost", port);
tcpClient.ReceiveTimeout = 10000;
NetworkStream networkStream = tcpClient.GetStream();
BinaryReader reader = new BinaryReader(networkStream);
reader.ReadString(); // <--- Hangs
tcpClient.Close();
它将挂在ReadString()
上并最终超时。如果将其更改为
reader.Read(); // <--- Returns 72
返回72
,我假设它对应H
。显然,Java服务器确实正在发送消息 - 为什么ReadString()
挂起?
答案 0 :(得分:2)
您编写的格式与随后读取的格式不匹配。 BinaryReader.ReadString
的文档说:
从当前流中读取字符串。 该字符串以长度为前缀,一次编码为整数7位。
这与你所写的内容截然不同。
我的猜测是ReadString
得到一个无意义的大&#34;长度&#34;,并试图读取那么多字节。当然,他们不会被送去。