我必须使用Java的socket api编写多线程客户端和服务器.客户端和服务器都是多线程的,因此服务器可以处理多个连接,客户端可以测试服务器处理连接的能力.
我的代码在这里:https://github.com/sandyw/Simple-Java-Client-Server
我有一对,可能是相关的问题.一个,偶尔会有一个客户端线程抛出
java.net.SocketException: Socket closed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
at java.io.InputStreamReader.read(InputStreamReader.java:167)
at java.io.BufferedReader.fill(BufferedReader.java:136)
at java.io.BufferedReader.readLine(BufferedReader.java:299)
at java.io.BufferedReader.readLine(BufferedReader.java:362)
at ClientThread.run(ClientThread.java:45)
at java.lang.Thread.run(Thread.java:680)
Run Code Online (Sandbox Code Playgroud)
从其位置开始意味着服务器在客户端完成读取之前关闭其套接字.我怎么能阻止这个?
此外,即使计算抛出Socket closed异常的线程,似乎并非所有服务器线程都在发送它们的输出.例如,30个服务器线程中的23个将发送其输出,但只有22个客户端线程将接收任何内容.通讯显然在某处丢失了,我该如何防止这种情况发生?