【发布时间】: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 行是注释。如果您希望我们认真查看,请发布您运行的真实代码。或者用新消息重新发布异常跟踪。