Android 连接由对等异常重置

标签 android tcp arduino

我正在编写一个 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)

这是从主 Activity 调用的线程,用于通过 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();
                }
            }
        }

    }

如有任何帮助,我们将不胜感激。谢谢!

最佳答案

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

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

Broken Pipe Exception

关于Android 连接由对等异常重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10777912/

相关文章:

C++ 串行通信问题

c - 使用终端发送时 Serial.read() 的值不正确

android - Ionic 应用程序适用于 ios,但不适用于 android

java - 发送 TCP/IP 消息 AKKA actor

.net - 如何设计不同设计模式的tcp通信?

vb.net - Meitrack设备返回什么来确认服务器收到的数据

c++ - PROGMEM 从字符串数组中获取单个字符?

java.lang.NoSuchMethodError : No static method combineMeasuredStates(II)I in class 错误

android - init_module '/path/to/module.ko' 失败 <文件存在>

android - 声明 Activity 的目的是什么?