2016-05-06 21 views
0

デバイスから読み取った後に書き込みたい(Bluetoothソケット経由) 問題は、ソケットが閉じられたときにwhile(true)が終了して再度書き込めないことです。Bluetoothソケットを読み取った後に出力ストリームを書き込む

これはコードです:

 try { 
      // This will block until it succeeds in connecting to the device 
      // through the bluetoothSocket or throws an exception 
      bluetoothSocket.connect(); 
      try { 
       connectingThread.sleep(1000); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
      outstream = bluetoothSocket.getOutputStream(); 
      outstream.write("P".getBytes()); 
      instream = bluetoothSocket.getInputStream(); 
      byte[] buffer = new byte[128]; // buffer store for the stream 
      int bytes; // bytes returned from read() 
      String readMessage = ""; 

      // Keep listening to the InputStream until an exception occurs 
      while (true) { 
       try { 
        // Read from the InputStream 
        bytes = instream.read(buffer); 
        if(bytes!= -1){ 
        // Send the obtained bytes to the UI activity 
        readMessage = new String(buffer, 0, bytes); 

        arrayList.add(readMessage); 
        biodyMsg = TextUtils.join("", arrayList); 
        } 

       } catch (Exception e) { 

        Log.d("Read Error", e.toString()); 

       }finally { 
        outstream = bluetoothSocket.getOutputStream(); 
        outstream.write("F".getBytes()); 
       } 
       break; 
      } 

     } catch (IOException connectException) { 
      connectException.printStackTrace(); 
      try {  
       bluetoothSocket.close(); 
      } catch (IOException closeException) { 
       closeException.printStackTrace(); 
      } 
     } 

Logcat

は、あなたが私を助けることができる

答えて

0

while (true)ループがbreak声明を経由している、またはキャッチされない例外を取得することにより終了することができます唯一の方法は、あなたは1つを得ることについて言及していない。

  • IOException:あり、このコードでは2可能性のある例外はあるが、ピアが接続をリセット場合は、このコードでIOExceptionを得ることができる唯一の方法です。
  • ArrayIndexOutOfBoundsExceptionStringを作成する場合、bytesが負の場合、次のようになります。あなたはこれについても言及していません。

あなたの実際の問題は、あなたが順番にピアが順番にあなたが閉じるべきであることを示し、接続を閉じたことを示すと思われる、ストリームの終わりを示すことになる、-1のためbytesをチェックしていないことです読み取りループから抜け出すことができます。

+0

申し訳ありませんが、例外を置いてください:java.io.IOException:壊れたパイプ –

+0

したがって、ピアは接続をリセットしました。あなたの質問は何ですか? – EJP

+0

接続をリセットする前に書き込むことができますか?私は読んだ後に "F"を送信したい –

関連する問題