2012-02-06 86 views
1

我是Java和Android編程的新手,但這個項目需要我這樣做。Android:連續套接字寫入

應用程序將字節發送到服務器,該服務器接收發送給它的所有信息並執行等效命令。客戶端和服務器處於獨佔鏈接,所以我不擔心安全問題。

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 2012-02-06 03:53:33

+0

@Duck,我也試過這樣做:http://dl.dropbox.com/u/22027127/helpv2.txt但字節只能發送/寫入服務器一次。 – mikko3024 2012-02-06 05:29:24

回答

3
  1. 您在創建多個插座「而」上第二個鏈接塊
  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; 
    } 
}