java BufferedReader在windows而不是mac上工作

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;

我试图使用BufferedReader或Scanner从服务器读取输出,但它被read()或readLine()对象卡住了。它永远不会从那条线返回。然而,它在Windows上运行得非常完美。 读取输出的代码如下所示:

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?你能举一个完整的例子来说明这个问题吗?