java.net.SocketException:recvfrom失败:ECONNRESET(连接由对等方重置)

2024-02-19

我在 Android 中有一个 HTTP 服务器。我为每个 HTTP 请求创建一个新线程,如提到的链接中所示:

http://hc.apache.org/httpcomponents-core-ga/httpcore/examples/org/apache/http/examples/ElementalHttpServer.java http://hc.apache.org/httpcomponents-core-ga/httpcore/examples/org/apache/http/examples/ElementalHttpServer.java.

当我发出多个 GET 请求时,有时会收到如下异常:

01-22 10:28:22.779: W/System.err(2019): java.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by peer)  
01-22 10:28:22.779: W/System.err(2019):     at libcore.io.IoBridge.maybeThrowAfterRecvfrom(IoBridge.java:552)  
01-22 10:28:22.779: W/System.err(2019):     at libcore.io.IoBridge.recvfrom(IoBridge.java:516)
01-22 10:28:22.779: W/System.err(2019):     at java.net.PlainSocketImpl.read(PlainSocketImpl.java:488)  
01-22 10:28:22.779: W/System.err(2019):     at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46)     
01-22 10:28:22.784: W/System.err(2019):     at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:240)   
01-22 10:28:22.784: W/System.err(2019):     at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:103)  
01-22 10:28:22.784: W/System.err(2019):     at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:191)  
01-22 10:28:22.784: W/System.err(2019):     at org.apache.http.impl.io.HttpRequestParser.parseHead(HttpRequestParser.java:71)  
01-22 10:28:22.784: W/System.err(2019):     at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:174)  
01-22 10:28:22.784: W/System.err(2019):     at org.apache.http.impl.AbstractHttpServerConnection.receiveRequestHeader(AbstractHttpServerConnection.java:141)   
01-22 10:28:22.784: W/System.err(2019):     at org.apache.http.protocol.HttpService.handleRequest(HttpService.java:135)    
01-22 10:28:22.784: W/System.err(2019):     at com.example.devicecommunication.ConnectService$WorkerThread.run(ConnectService.java:744)    
01-22 10:28:22.784: W/System.err(2019): Caused by: libcore.io.ErrnoException: recvfrom failed: ECONNRESET (Connection reset by peer)   
01-22 10:28:22.784: W/System.err(2019):     at libcore.io.Posix.recvfromBytes(Native Method)   
01-22 10:28:22.784: W/System.err(2019):     at libcore.io.Posix.recvfrom(Posix.java:131)   
01-22 10:28:22.784: W/System.err(2019):     at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:164)   
01-22 10:28:22.789: W/System.err(2019):     at libcore.io.IoBridge.recvfrom(IoBridge.java:513)   
01-22 10:28:22.789: W/System.err(2019):     ... 10 more

我不知道为什么会发生这种情况。下面是使用的代码,该异常发生在handleRequest()方法或conn.close()中。

  class WorkerThread extends Thread{
    HttpService httpService;
    HttpServerConnection conn;
    public WorkerThread(HttpService httpService, HttpServerConnection conn){
        super();
        this.httpService = httpService;
        this.conn = conn;
    }       
    public void run(){
        HttpContext context = new BasicHttpContext(null);

        try {
          Log.d(TAG,"Going to call Handle request here");
                this.httpService.handleRequest(this.conn, context);         
             } catch (ConnectionClosedException ex) {
            ex.printStackTrace();
            Log.d(TAG,"Client closed connection exception");
        } catch (IOException ex) {
            ex.printStackTrace();
            Log.d(TAG,"I/O exceptionnnnn " + ex.getMessage());
        } catch (HttpException ex) {
            Log.d(TAG,"Unrecoverable HTTP protocol violation: " + ex.getMessage());
        }
        finally {
           Log.d(TAG,"Inside Finally Block");
          try {              
            this.conn.close(); 
            Log.d(TAG,"Connection closed successfully");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }         
          }
    }
}

知道为什么会发生这种情况或者如何解决吗?


当我使用以下代码片段将 DefaultHttpServerConnection 属性传递给 handle() 方法时,我没有收到此异常:

在 WorkerThread 类中,使用以下代码传递 DefaultHttpServerConnection 连接对象:

HttpContext context = new BasicHttpContext(null);
context.setAttribute("XXX",this.conn);

在handle()方法中,使用以下方法获取连接对象:

(DefaultHttpServerConnection)context.getAttribute("XXX");

希望它能帮助别人!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java.net.SocketException:recvfrom失败:ECONNRESET(连接由对等方重置) 的相关文章

  • 如何使用云 Firestore 实现 HIPAA 合规性? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我必须开发一个健康应用程序 想知道是否可以使用 Cloud Firestore 作为它的后端 任何人都可以对如何使我的系统符合 HIPAA
  • 即使卸载后,旧的 GCM 令牌还会继续存在吗?

    我们一直致力于 GCM 实现 并注意到分配给应用程序安装的设备地址即使卸载应用程序也可以继续存在 因此 我们安装一个应用程序 获取令牌 A 设备订阅特定警报类型 1 消息令牌 A 并取得巨大成功 然后我们卸载该应用程序 不 我们重新安装 接
  • Android IAB:设备上无法使用计费服务

    我正在尝试在我的应用程序中实现 IAB 每次应用程序启动时 启动都会失败并显示 Problem setting up In app Billing IabResult Billing service unavailable on devic
  • 将 EditText 添加到工具栏

    My Toolbar and EditText看起来像这样 我尝试将其添加为ActionView但我得到了这个结果 它基本上只是添加了我的话 点击下方 作为标题 而没有TextView 这就是我所做的 menu xml menu menu
  • 使用 Eclipse 的 Android“Hello World”教程

    我尝试编写我的第一个应用程序 Hello World 我已经遇到了一个无法修复的错误 当我运行该程序时 我得到 无效的命令行参数 文件 提示 使用 foo 启动名为 foo 的虚拟设备 请使用 help 获取更多信息 有谁知道这意味着什么以
  • ConstraintLayout 内的 ImageView 不起作用

    我在正确显示 ImageView 时遇到问题 我想在 ConstraintLayout 中显示 ImageView 在预览中 它看起来完全符合我的需要 但是当我在设备上启动它时 它看起来完全不同 此布局位于回收视图内 这段代码有什么问题
  • 可选择的圆形图像视图,如 Google+

    如何创建一个可选择的循环ImageView就像当前用于个人资料图片的 Google 应用程序一样 这就是我所指的 上图未选中 下图已选中 我尝试一比一复制个人资料图片 到目前为止我的工作 loadedImage is the Bitmap显
  • Android更改ListView字体

    似乎是一个简单的问题 但由于我是 Android 开发新手 所以我对 Android ListViews 知之甚少 以下是我在项目中用于 ListView 的代码 Listview code starts mainListView List
  • 如何在android文本视图的任意一端插入文本?

    是否可以有一个文本视图 其中在文本视图的最左侧包含一些文本 在文本视图的最右侧包含一些文本 例如 我想要一个应该像这样显示的文本视图 文字 a 可以使用单个 TextView 只需将文本放入 HTML 格式即可 例如
  • 如何在画布的右上角绘制位图

    我正在尝试绘制位图top right hand corner of the Canvas 到目前为止我已经做了以下事情 100x40 dimensions for the bitmap bitmap BitmapFactory decode
  • Firebase 依赖项:“警告:API 'variant.getMergeResources()' 已过时并已被替换”[重复]

    这个问题在这里已经有答案了 我最近开始使用 firebase 并按照官方指南添加了一些依赖项到我的项目中以便能够使用它 以下是我添加到新创建的项目中的依赖项 apply plugin com google gms google servic
  • 模拟三星 Galaxy Tab

    我想使用新的 Samsung Galaxy Tab 平板电脑测试我的应用程序 我应该在模拟器中设置什么参数来模拟该设备 我应该设置什么分辨率和密度 如何表明这是一个大屏幕设备 这款平板电脑支持哪些硬件 最大堆大小是多少 哪个安卓版本 UPD
  • 检查手机是否可以发送短信

    我已经读过一些相关的问题 但大多数都是针对呼叫 而不是短信 到目前为止我发现的是 TelephonyManager manager TelephonyManager context getSystemService Context TELE
  • 如何为 ActionBar 的 ActionMode 背景设置动画?

    背景 可以更改操作栏的背景 甚至可以在两种颜色之间设置动画 如下所示 public static void animateBetweenColors final ActionBar actionBar final int colorFrom
  • Android 为多个活动存储 Socket.io 对象

    我正在制作我的第一个基于 Socket io 的 Android 应用程序 套接字从 Web 服务发送和接收数据 应用程序中有许多屏幕用于不同的功能 我如何在这些不同的活动中使用相同的套接字连接 我尝试在 Application 类中设置和
  • 如何更改操作栏上标题文本的大小?

    有一个ActionBar在每个 Android 4 0 应用程序上 它都有一个标题 我需要缩小这个尺寸 但我不明白我该怎么做 因为ActionBar不为其提供公共方法 Remark 我不想使用自定义视图 实际上 您可以对ActionBar
  • 如何从指纹扫描仪获取输入并保存[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在使用 Android Marshmallow 和 Moto G4 以及一台设备进行测试 我想创建一个应用程序 它将接受指纹输入并
  • Google 地图视图无法在模拟器上显示

    您好 我正在尝试在 Android 模拟器中显示地图 但它无法在地图视图中显示谷歌地图 并且也不从 Android 模拟器上的浏览器连接 www google com 那么是否有关于在模拟器上运行互联网的任何设置 谁能帮我解决这个问题 尝试
  • 我应该如何处理 Android 应用程序中 http post 的服务器超时和错误代码响应?

    我的 Android 应用程序会向 URL 发送 http 帖子 例如http example com 电子邮件受保护 http example com abc php email abc xyz com因此 Android 应用程序基本上
  • Android:创建自定义形状进度条的最佳方法

    我想创建一个自定义形状的进度条 它会根据其进度改变颜色 但这几乎是一个不同的问题 那么 创建如下图所示的自定义形状进度条的最佳方法是什么 抱歉 MS Paint 绘图技巧不佳 为了拥有所有可能性 您应该创建一个从进度条派生的自定义类并完全重

随机推荐