完整的错误是:
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)
“at chat.run(chat.java:76)”是这一行:
System.out.println("[_in_"+(line=ins.readLine())+"_]");
line 是一个字符串,ins 是一个 BufferedReader
ins = new BufferedReader(new InputStreamReader(_sock.getInputStream()));
_ socks 存在
Socket _sock = null;
_sock = serv_sock.accept();
这发生在我的服务器 java 而不是我的客户端 java ... 另外,当我有一段时间没有发送任何东西时,就会发生这种情况
-----编辑------
我又试了一次; 首先它什么都不做 40 分钟,但它仍然有效, 然后我又等了 40 分钟,这次没成功。
看起来有点随意.. 我不知道是什么原因造成的。
我的文件是 * [客户端.java], [聊天.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() throwing java.net.SocketException: Software caused connection abort: recv failed”之后在几个不同的页面中,我相信这与您的网络有关。连接似乎因 TCP 超时或传输中的数据损坏而终止。
如果这种情况发生在本地主机连接(同一台计算机上的服务器和客户端)上,则可能是内存有问题,否则您的网卡、路由器或电缆可能在某处损坏。如果您使用无线,它们可能非常不可靠。
关于Java 错误 - 软件导致连接中止 : recv failed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9035785/