【问题标题】:Java void sendUrgentData() throws SocketExceptionJava void sendUrgentData() 抛出 SocketException
【发布时间】:2011-04-27 20:46:31
【问题描述】:

我正在尝试使用 sendUrgentData() void 来确定连接是否仍然存在。通过这个 void 发送的数据将在服务器端被忽略,但是当连接丢失时,sendUrgentData 在客户端抛出一个 SocketException。

这是应该的。 但是,在多次调用 sendUrgentData 后,它似乎断开连接并在连接仍然完全活跃时抛出 SocketException:

java.net.SocketException: Connection reset by peer: send

我用嗅探器检查了网络流量,发现重置数据包从未发送过。 我应该如何解决这个问题?我试图避免以正常方式发送这些数据,以避免损坏流中当前的数据。

【问题讨论】:

    标签: java sockets reset socketexception


    【解决方案1】:

    发送的数据不会被忽略,如果它是用 Java 编写的,它将被服务器内联读取。因此,您可能会导致协议错误。对等方重置连接意味着您已写入已被对等方关闭的连接......可能是为了响应协议错误。

    【讨论】:

    • 我也是这么想的,但是在检查了网络流量并没有看到 RST 标记的数据包后,我开始怀疑... 今天再次检查,结果发现我错过了重置数据包。愚蠢的我=)。我已经解决了,谢谢你的帮助!
    • @ThomasSmith 您能否在此处发布您的解决方案。谢谢
    【解决方案2】:

    如果底层实现不支持发送紧急数据,Socket#sendUrgentData() 将抛出SocketException。从内存来看,Java 1.6 上套接字异常的消息描述类似于“不支持紧急数据”。

    • 您在什么平台上运行(Windows、Linux 等)?

    • 您使用的是什么版本的 Java?

    【讨论】:

    • 我在 Windows 7 64 位上使用 Java 1.6_24。我收到的错误消息只是 Connection reset by peer: send
    • 这不是它在 Javadoc 中所说的。没有任何迹象表明某些实现可能不支持它,而且我从未见过不支持的 TCP/IP 实现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 2011-12-27
    • 2011-10-27
    • 1970-01-01
    相关资源
    最近更新 更多