【问题标题】:Android Connection reset by peer exception对等异常重置Android连接
【发布时间】:2012-06-02 10:09:19
【问题描述】:

我正在编写一个 Android 应用程序,通过 TCP 将数据从 android 发送到 arduino 板。出于测试目的,我只是将字符“A”从 Android 写入 Arduino。但是,我注意到在写了 20-30 次之后,我得到了以下异常:

W/System.err(11561): java.net.SocketException: Broken pipe
W/System.err(11561):    at org.apache.harmony.luni.platform.OSNetworkSystem.write(Native Method)
W/System.err(11561):    at dalvik.system.BlockGuard$WrappedNetworkSystem.write(BlockGuard.java:284)
W/System.err(11561):    at org.apache.harmony.luni.net.PlainSocketImpl.write(PlainSocketImpl.java:472)
W/System.err(11561):    at org.apache.harmony.luni.net.SocketOutputStream.write(SocketOutputStream.java:68)
W/System.err(11561):    at io.raas.FromBoard.run(FromBoard.java:43)
W/System.err(11561):    at java.lang.Thread.run(Thread.java:1019)

这是从主活动调用以通过 tcp 发送数据的线程:

/*
 * Cleanup: SERVERPORT should be in Constants.java
 */
package io.raas;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;

import android.util.Log;

    class ToBoard implements Runnable {
        Socket s = null;
        static ServerSocket ss = null;
        InputStream i = null;
        OutputStream o = null;
        public static final int SERVERPORT = 6000;
        char flg = 65;
        int count = 0;
        public void run() {
            try {
                if(ss==null) {  ss = new ServerSocket(SERVERPORT);
                s = ss.accept(); }
            } catch(Exception e) {e.printStackTrace();}

            // change this to while true....
            while (true) {
                Log.d("SEPERATOR", "-----------------------------------------------------------------------------");
                count++ ;
                try {
                    if(flg == 65) {
                        o = s.getOutputStream();
                        Thread.sleep(500);
                        o.write(flg);
                        o.flush();
                    }
                    /*
                    i = s.getInputStream();
                    int intRead = i.read();
                    */
                    /*
                    if(i==null) {
                        i = s.getInputStream();
                    }
                    int intChar = (char)i.read();
                    Log.d("WRITING_TO_BOARD", "====================================> READ FROM BOARD: " + intChar);
                    */
                } catch (Exception e) {
                    Log.d("TX WE HAVE A PROBLEM", "YEA WE DO!");
                    e.printStackTrace();
                }
            }
        }

    }

对此的任何帮助将不胜感激。谢谢!

【问题讨论】:

  • 我很困惑,这个类被称为 FromBoard 但你实际上将数据发送到董事会。你说你发送简单的'A',但你写了 flg++ 它将发送 A、B、C 等等,最终超出了 ASCII 范围。 ::::: 条件 flg != -99 似乎注定要失败,因为您从 65 岁以上开始。
  • 感谢您抽出宝贵时间写信给我 ilomambo!我在尝试调试它时正在玩我的代码......因此不一致。我现在已经更新了。现在它应该无限期地继续发送“A”。谢谢!
  • 在您发布的堆栈跟踪中,异常是在 FromBoard 第 43 行中生成的,但您发布的代码的第 43 行是注释。如果您希望我们认真查看,请发布您运行的真实代码。或者用新消息重新发布异常跟踪。

标签: android tcp arduino


【解决方案1】:

我相信这是在您写入另一端已经关闭的连接时引起的。

还有一个问题,详情如下:

Broken Pipe Exception

【讨论】:

    猜你喜欢
    • 2017-04-12
    • 1970-01-01
    • 2023-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多