2012-05-27 35 views
1

我正在編寫一個Android應用程序,通過TCP將數據從android發送到arduino板。出於測試目的,我只是將Android中的字符'A'寫入Arduino。然而,我注意到,寫20-30次後,我得到以下異常:通過同位異常重置Android連接

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開始。 – ilomambo

+0

感謝您花時間給我寫信給我ilomambo!我正在玩我的代碼,同時試圖調試它...因此不一致。我現在更新了它。現在它應該一直髮送無限期的'A'。謝謝! –

+0

在您發佈的堆棧跟蹤中,在FromBoard第43行中生成了異常,但是您發佈的代碼的第43行是註釋。如果您希望我們認真看看,請發佈您運行的真實代碼。或者用新消息重新發布異常跟蹤。 – ilomambo

回答

2

我相信這是在您寫入到另一端已關閉的連接時引起的。

有下面詳細信息的另一個問題是:

Broken Pipe Exception

相關問題