【问题标题】:Java error - Software caused connection abort: recv failedJava 错误 - 软件导致连接中止:recv 失败
【发布时间】:2025-12-22 18:15:06
【问题描述】:

完整的错误是:

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()));

_sock 存在

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

我认为这是一个窗口/网络的事情。 谁能帮我解决这个问题??

【问题讨论】:

标签: java


【解决方案1】:

我无法使用您的代码和本地主机连接在我自己的计算机上复制您的确切问题,但是在阅读了“BufferedReader.readLine() throwing java.net.SocketException: Software caused connection abort: recv failed”之后在几个不同的页面中,我相信这与您的网络有关。由于 TCP 超时或传输中的数据损坏,连接似乎已终止。

如果这发生在 localhost 连接上(服务器和客户端在同一台计算机上),则可能是内存故障,否则您可能在线路的某处有损坏的网卡、路由器或电缆。如果您使用无线,它们可能非常不可靠。

【讨论】:

  • 向问题添加了更多信息
  • 您修改了代码(它从属性文件中获取端口号等)并打开了 2 个 vlcs 并进入工具 -> 首选项 -> 显示设置:全部 -> 界面 -> 主界面 -> rc -> 勾选“不要打开dos..”并在“tcp 命令输入”中输入 127.0.0.1:PORT_YOU_SET_IN_vlc.java? (在服务器和客户端中选择不同的端口并在 tcp-command-input 窗口中进行相应更改) - 如果你这样做并且它可以暂停和播放 - 你是否暂停并让它坐了一会儿?尝试 30 多分钟,然后看看它是否会给您错误。在等待 x 分钟的同时做其他事情。尝试 1-3 次。
  • 我对VLC的网络不熟悉,我把代码中与vlc相关的调用注释掉了。另请注意,我家里没有 Windows 计算机,只有 Linux,因此它们的行为可能完全不同。但是,我仍然认为您的异常与网络链接意外断开有关(这也可能是由 VLC 做一些古怪的事情引起的),但除此之外,我真的不知道......
  • wiki.videolan.org/VLC_command-line_help 列出了 VLC 网络的多个不同超时选项,我最好的猜测是 VLC 将在暂停足够长的时间后终止与 TCP 超时的连接。不幸的是,我认为我无法为您提供任何进一步的帮助。
  • 该异常与 vlc 无关。是 BufferedReader.readLine() 扔了它
【解决方案2】:

这个错误的发生正是由于网络问题。当与数据库的连接失败并且应用程序无法检索所需的数据时,它就会出现。问题可能出在您的连接线或调制解调器上。尝试改变它们。否则,请检查您在 sql developer 等中的数据库访问,如果它工作正常,则可能是事务超时问题。

【讨论】:

    【解决方案3】:

    有两种可能:

    • 数据库已关闭,或
    • 数据库服务器的 IP 地址与网络上现有服务器的 IP 地址重复

    【讨论】:

    • 问题是关于苹果的颜色。你试图用苹果的形状来回答。
    最近更新 更多