Соединение с Android сбрасывается из-за исключения

1

Я пишу приложение 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();
                }
            }
        }

    }

Любая помощь в этом будет высоко оценена. Благодарю!

  • 0
    Я запутался, класс называется FromBoard, но вы на самом деле отправляете данные на доску. Вы сказали, что отправляете простые 'A', но вы написали flg ++, который будет отправлять A, B, C и т. Д., В конечном итоге выходя из диапазона ASCII. ::::: Также условие flg! = -99 кажется обреченным, потому что вы начинаете с 65 и выше.
  • 0
    Спасибо, что нашли время и написали мне ilomambo! Я играл со своим кодом, пытаясь отладить его ... отсюда и несоответствие. Я обновил это сейчас. Теперь он должен просто посылать «А» до бесконечности. Спасибо!
Показать ещё 1 комментарий
Теги:
arduino
tcp

1 ответ

2

Я считаю, что это вызвано тем, что вы пишете соединение, которое уже закрыто.

Существует еще один вопрос с деталями ниже:

Исключение нарушенных труб

Ещё вопросы

Сообщество Overcoder
Наверх
Меню