完整的错误是:
java.net.SocketException: Software caused connection abort: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at java.net.SocketInputStream.read(SocketInputStream.java:121)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:154)
at java.io.BufferedReader.readLine(BufferedReader.java:317)
at java.io.BufferedReader.readLine(BufferedReader.java:382)
at chat.run(chat.java:76)
at java.lang.Thread.run(Thread.java:722)
这行是“在chat.run(chat.java:76)”:
System.out.println("[_in_"+(line=ins.readLine())+"_]");
行是字符串,ins是BufferedReader
ins = new BufferedReader(new InputStreamReader(_sock.getInputStream()));
_ socks 被
Socket _sock = null;
_sock = serv_sock.accept();
这发生在我的服务器Java而不是我的客户端Java上...
而且,当我一段时间不发送任何东西时,会发生这种情况
- - -编辑 - - -
我又试了一次;
首先,它花了40分钟不执行任何操作,但仍然有效,
然后我又等了40分钟,这次却没有用。
这似乎是随机的。
我不知道是什么原因造成的。
我有的文件是
* [client.java],[chat.java],[vlc.java]
* [server.java],[chat.java],[vlc.java]
尽管聊天不同,但两者的vlc文件都相同
(因为我尚未在客户端和服务器上都完成线程处理)
这是代码;
SERVER
server.java: pastebin.com/GH8ShcGp
chat.java : pastebin.com/iaL23kSb
vlc.java : pastebin.com/9kyrbh5q
CLIENT
client.java: pastebin.com/HDK450Jg
chat.java : pastebin.com/CfHrEUkE
vlc.java : pastebin.com/SfZgYy58
我认为这是一个窗口/网络的东西。
有人可以帮我解决这个问题吗?
最佳答案
我无法使用您的代码和本地主机连接在您自己的计算机上复制时遇到确切的问题,但是在阅读了有关“BufferedReader.readLine()引发java.net.SocketException:软件导致连接中止:recv失败”的信息后,页面,我相信这与您的网络有关。由于TCP超时或传输中的数据损坏,连接似乎已终止。
如果这是通过本地主机连接(同一台计算机上的服务器和客户端)发生的,则可能是内存故障,否则,线路上的网卡,路由器或电缆可能会损坏。如果您使用的是无线网络,那么它们可能会非常不可靠。