首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么SocketChannel调用读取(ByteBuffer)抛出java.net.SocketException: recvfrom failed: ECONNRESET (对等方重置连接)

为什么SocketChannel调用读取(ByteBuffer)抛出java.net.SocketException: recvfrom failed: ECONNRESET (对等方重置连接)
EN

Stack Overflow用户
提问于 2017-05-17 06:54:28
回答 1查看 471关注 0票数 0

我们的项目实现了自己的长连接框架,基于NIO为推送,它过去的工作正常。最近,出现了一些问题,"SocketChannel.read(byteBuffer)“抛出异常"java.net.SocketException: recvfrom failed: ECONNRESET (Connection by peer)",详细信息如下:

图像包含错误消息

错误代码如下所示:

代码语言:javascript
复制
private void read(ByteBuffer byteBuffer, int length) throws Exception {
        int count = 0;
        long readBeginMills = SystemClock.elapsedRealtime();
        while (count < length) {
            try {
                int readCount = mSocketChannel.read(byteBuffer);
                long nowMills = SystemClock.elapsedRealtime();
                if (readCount > 0) {
                    count += readCount;
                    readBeginMills = nowMills;
                }
                //1.readCount为-1时是连接断开了,直接报错重连
                //2.如果读取数据超过了20s也报错重连
                if(nowMills - readBeginMills >= 20000 || readCount == -1){
                    throw new LostTcpByteException("byte lost exception,need to shutdown and reconnection");
                }
            } catch (Exception e) {
                throw e;
            }
        }
    }

我找了很多类似的错误,但找不到解决问题的好主意,我该怎么办?谢谢你的任何一位专家!

EN

回答 1

Stack Overflow用户

发布于 2017-05-17 07:33:33

以下任一项:

  1. 您已将数据发送到已被对等方关闭的连接。
  2. 对等体关闭连接时,其套接字接收缓冲区中仍有未读数据。
  3. 对等程序在Windows上运行,其进程已退出。
  4. 同侪故意重置连接的手段,我将在这里不详细。
  5. 出现了各种主机或网络条件中的一种,如连接超时或失败。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44017634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档