给定成功的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()
挂起? 最佳答案
您写入然后读取的格式之间不匹配。 BinaryReader.ReadString
的文档说:
从当前流中读取一个字符串。该字符串以长度为前缀,一次编码为7位整数。
那和你写的很不一样。
我的猜测是ReadString
的长度变得异常大,并试图读取那么多字节。当然,不会发送。
关于java - 为什么BinaryReader卡在ReadString()上而不卡在Read()上?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42733013/