2012-02-06 40 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; 
    } 
}