Java套接字客户端 - 服务器冻结

时间:2016-02-22 12:46:15

标签: java sockets client-server

我已经实现了基于套接字的客户端 - 服务器架构,其中服务器接收来自客户端的请求,进行一些计算并返回结果。 为简单起见,假设客户端向服务器发送请求,服务器执行任务100次,返回这些结果的数组。

我将服务器打包为jar文件,我在客户端内启动了一个新的服务器进程(目的是在某个时候实现并行处理)。但是,迭代过程在第80次迭代时冻结:S。当我停止执行时,服务器继续并完成其任务。

我还尝试使用以下选项运行服务器客户端:

  1. 作为单独的Java应用程序(首先是服务器,然后是客户端)
  2. 从相同的Java应用程序(首先启动服务器,然后启动客户端)
  3. 1& 2工作正常,但预定的方式在某些时候停止。

    你知道可能是什么问题吗?

    更新

    当它尝试写入文件时,服务器执行似乎冻结了(在这种情况下是System.err)

    Stack trace:
     java.io.FileOutputStream.writeBytes(Native Method)
     java.io.FileOutputStream.write(FileOutputStream.java:326)
     java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
     java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
     java.io.PrintStream.write(PrintStream.java:482)
     sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)
     sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)
     sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:104)
     java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:185)
     java.io.PrintStream.write(PrintStream.java:527)
     java.io.PrintStream.print(PrintStream.java:669)
     java.io.PrintStream.append(PrintStream.java:1065)
     java.io.PrintStream.append(PrintStream.java:57)
     java.util.Formatter$FixedString.print(Formatter.java:2595)
     java.util.Formatter.format(Formatter.java:2508)
     java.io.PrintStream.format(PrintStream.java:970)
     java.io.PrintStream.printf(PrintStream.java:871)
    

    更新2

    问题:服务器端的缓冲区溢出

    解决方案

    A)增加Eclipse输出控制台容量(instructions here)。

    B)将System.out或System.err重定向到文件。

    C)正如@Eashi所建议:禁用System.err / out(instructions here)。

    D)@Peter Lawrey的另一个很好的解决方案,如果你使用ProcessBuilder:通过

    将System.out与System.out合并
        ProcessBuilder pb = new ProcessBuilder(....);         
        pb.redirectErrorStream(true);
    

0 个答案:

没有答案