小编Tic*_*ock的帖子

Java多线程客户端/服务器 - java.net.SocketException:Socket已关闭

我必须使用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个客户端线程将接收任何内容.通讯显然在某处丢失了,我该如何防止这种情况发生?

java sockets multithreading

4
推荐指数
1
解决办法
3万
查看次数

标签 统计

java ×1

multithreading ×1

sockets ×1