Я пишу приложение Android для отправки данных с android на плату arduino через TCP. Для целей тестирования я просто пишу персонажа "А" от 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();
}
}
}
}
Любая помощь в этом будет высоко оценена. Благодарю!
Я считаю, что это вызвано тем, что вы пишете соединение, которое уже закрыто.
Существует еще один вопрос с деталями ниже: