java BufferedReader在windows而不是mac上工作
我试图使用BufferedReader或Scanner从服务器读取输出,但它被read()或readLine()对象卡住了。它永远不会从那条线返回。然而,它在Windows上运行得非常完美。 读取输出的代码如下所示:java BufferedReader在windows而不是mac上工作,java,windows,macos,sockets,bufferedreader,Java,Windows,Macos,Sockets,Bufferedreader,我试图使用BufferedReader或Scanner从服务器读取输出,但它被read()或readLine()对象卡住了。它永远不会从那条线返回。然而,它在Windows上运行得非常完美。 读取输出的代码如下所示: while ((serverResponce = this.in.readLine()) != null) { if (serverResponce.compareTo(message) == 0) { break;
while ((serverResponce = this.in.readLine()) != null) {
if (serverResponce.compareTo(message) == 0) {
break;
}
}
或使用扫描仪类:
Scanner scanner = new Scanner(socket.getInputStream());
while (scanner.hasNextLine())
{
serverResponce = scanner.nextLine();
if (serverResponce.compareTo(message) == 0) {
break;
}
}
我还尝试了BufferedReader中的ready()或Scanner中的hasNextLine(),但没有任何用处
我对服务器的输出没有任何控制权,所以我不知道他们使用的是什么格式。它在Mac上使用telnet工作,但不在java应用程序中。什么样的原因使它在Windows上工作,但在Mac OS X上卡住了?您不知道服务器正在发送什么,但您使用的是一个字符串读取器,它试图逐行读取。请注意,“线”在不同系统上的定义不同。在Windows中,行以“\r\n”结尾,在MacOS上,行以“\r”或“\n”结尾,具体取决于版本。尝试逐字节读取,并首先识别数据包终止符 此外,正如所解释的,仅仅依靠
ready()
是不够的。如果数据可用,它将返回true(但该数据可能不会被上述行终止符终止,因此readLine()
仍将阻塞)。如果ready()
如果这仍然对您没有帮助,那么外部网络工具(例如)对于调试网络代码来说是非常宝贵的。如果您真的认为存在错误,请确保您有独立于系统的代码,并且您可以通过监听自己的最小服务器来重新产生问题。readLine()在Mac OS X上永远不会返回(卡在那里)。但在Windows中,它运行正常。什么是ServerResponse?你能举一个完整的例子来说明这个问题吗?