Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java X字节后写入套接字失败_Java_Sockets - Fatal编程技术网

Java X字节后写入套接字失败

Java X字节后写入套接字失败,java,sockets,Java,Sockets,我正在尝试将歌曲数据写入套接字,但在大约66338字节后,会引发以下异常: E/ ( 1016): Connection reset by peer E/ ( 1016): java.net.SocketException: Connection reset by peer E/ ( 1016): at org.apache.harmony.luni.platform.OSNetworkSystem.writeSocketImp

我正在尝试将歌曲数据写入套接字,但在大约66338字节后,会引发以下异常:

    E/        ( 1016): Connection reset by peer
    E/        ( 1016): java.net.SocketException: Connection reset by peer
    E/        ( 1016):  at org.apache.harmony.luni.platform.OSNetworkSystem.writeSocketImpl(Native Method)
    E/        ( 1016):  at org.apache.harmony.luni.platform.OSNetworkSystem.write(OSNetworkSystem.java:723)
    E/        ( 1016):  at org.apache.harmony.luni.net.PlainSocketImpl.write(PlainSocketImpl.java:578)
    E/        ( 1016):  at org.apache.harmony.luni.net.SocketOutputStream.write(SocketOutputStream.java:59)
    E/        ( 1016):  at com.myprogram.StreamProxy.processRequest(StreamProxy.java:307)
    E/        ( 1016):  at com.myprogram.StreamProxy.run(StreamProxy.java:145)
    E/        ( 1016):  at java.lang.Thread.run(Thread.java:1096)
这只会发生在某些歌曲上,如果一首歌做到了,那么整个专辑中的所有歌曲都会做同样的事情。我想知道这是否与歌曲的标题信息有关

任何关于如何调试或修复此问题的建议都将不胜感激。谢谢

编辑:下面是从InputStream读取并写回套接字的代码。代码非常简单,所以我不确定为什么它会崩溃,除非在接收端关闭连接。(注意:这只是psuedocode,但给出了总体思路)


另外,这可能与套接字缓冲区填满有关吗?尤其是因为它似乎每次都在64k时崩溃。

堆栈跟踪显示对等方(服务器或客户端)关闭了连接,对我来说,可能是您读取(解析)了客户端上服务器的响应,或者是相反。

另一端的服务器进程可能有异常终止(例如SIGKILL)。这将导致连接中断。

最有可能的错误在代码中。如果您可以附加代码,将有助于缩小错误范围。如果你觉得这与头有关,请使用wireshark查看何时发生

编辑:我觉得它与setSoTimeout(毫秒)有关,这将在您在代码中编写的5秒不活动后超时。我想这应该是你以下陈述的原因:“如果一首歌做到了,那么整张专辑中的所有歌曲都做了同样的事情”


尝试增加超时值。

因为这是一个连接重置,它很可能意味着某个严重的问题(进程死机),而不是简单的连接关闭或错误处理有线协议。您能发布相关代码吗?你更有可能得到这样的帮助。我发布了一些伪代码来更好地了解正在发生的事情。谢谢。我将超时设置为0,因此没有超时。然而,我仍然得到同样的错误。
    InputStream data = realResponse.getEntity().getContent();
    Socket socket = new ServerSocket(port, 0, InetAddress.getByAddress(new byte[] {127,0,0,1}));
    socket.setSoTimeout(5000);
    port = socket.getLocalPort();
    Socket client = socket.accept();

    ...some code...

    byte[] buff = new byte[1024 * 50];
    while (isRunning && (readBytes = data.read(buff, 0, buff.length)) != -1) {
      client.getOutputStream().write(buff, 0, readBytes);
    }