2012-02-06 16 views
1

私はJavaとAndroidのプログラミングは初めてですが、私にはこのプロジェクトが必要です。Android:連続ソケット書き込み

アプリは、すべての情報を受信して​​同等のコマンドを実行するサーバーにバイトを送信します。クライアントとサーバーは排他的なリンクになっているので、セキュリティ上の問題は心配しません。 I上記のコードでは

public class NetworkTask extends AsyncTask<Void, byte[], Boolean> { 
    OutputStream dataOut; //Network Output Stream 

    @Override 
    protected void onPreExecute() { 
     Log.i("AsyncTask", "onPreExecute"); 
    } 

    @Override 
    protected Boolean doInBackground(Void... params) { 

     boolean result = false; 

     while (sendData) { //While Boolean sendData is true 

      try { 
       gsocket = new Socket(roubotIP, roubotPort); 

       byte[] data = EncodingUtils.getAsciiBytes(outData); 

       Log.i("Data: ", outData); 
       dataOut = new DataOutputStream(gsocket.getOutputStream()); 

       dataOut.write(data); 

      } catch (UnknownHostException e) { 
       Log.i("Socket: ","Unkown host"); 
       e.printStackTrace(); 
       result = true; 
      } catch (IOException e) { 
       e.printStackTrace(); 
       result = true; 
      } catch (Exception e) { 
       e.printStackTrace(); 
       result = true; 
      } 
     } 

     try { 
      dataOut.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return result; 
    } 
} 

は、サーバーへの接続を確立することができましたが、データは唯一のソケットごとに1〜2秒に書き込む/送信されます。

これを連続して実行する方法はありますか? (最小約0.5秒以下)

バッテリーの寿命は私にとっては問題ではなく、継続的にアクティブなソケットには問題があると受け入れています。

ありがとうございました。

+0

まあ、私のJavaは錆びていますが、あなたが望むものが確かに時間を食べるだろうと仮定したループを通して毎回新しいソケットを作成しているように見えます。 – Duck

+0

@ダック、私もこれをやってみました:http://dl.dropbox.com/u/22027127/helpv2.txtしかし、バイトは一度だけ送信/サーバーに一度書き込まれます。 – mikko3024

答えて

3
  1. 第2のリンク上のブロック
  2. あなたはブロックがあまりにも

、このようにそれを行うにしてください「しばらく」に複数の出力ストリームを作成する「ながら」あなたが複数のソケットを作成します。

public class NetworkTask extends AsyncTask<Void, byte[], Boolean> { 
    OutputStream dataOut; //Network Output Stream 

    @Override 
    protected void onPreExecute() { 
     Log.i("AsyncTask", "onPreExecute"); 
    } 

    @Override 
    protected Boolean doInBackground(Void... params) { 
     try { 
      gsocket = new Socket(roubotIP, roubotPort); 
      dataOut = new DataOutputStream(gsocket.getOutputStream()); 
     } catch (UnknownHostException e) { 
      Log.i("Socket: ","Unkown host"); 
      e.printStackTrace(); 
      return false; 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return false; 
     } 
     while (sendData) { //While Boolean sendData is true 
      try { 
       byte[] data = EncodingUtils.getAsciiBytes(outData); 
       Log.i("Data: ", outData); 
       dataOut.write(data); 
       dataOut.flush(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
       return false; 
      } 
     } 
     try { 
      socket.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return true; 
    } 
} 
関連する問題