2014-12-07 166 views
0

我正在構建一個Android應用程序,需要從我們的服務器發送一些文件。我已經實現了Java中的服務器套接字和Android套接字客戶端並進行了測試,但傳輸速度太慢。如何使用Java將服務器中的文件從服務器傳輸到Android手機?

FILE SIZE: 5 MB 
TRANSFER TIME: 15.3 seconds 

所以服務器建立我自己的電腦上,我使用端口轉發,所以我可以能夠從任何網絡連接到它。如果你認爲這是相關的,這是我的網絡的速度測試:http://www.speedtest.net/my-result/3965566858

現在的服務器代碼:

BufferedInputStream musicData = new BufferedInputStream(new FileInputStream(new File("fileSrc"))); 

byte[] data = new byte[8192]; 
int count = 0; 

while ((count = musicData.read(data)) > 0) { 
    outStreamMusic.write(data, 0, count); 
} 

客戶端代碼:

InputStream inStream = socketClient.getInputStream(); 
byte[] data = new byte[8192]; 
int count = 0; 

while ((count = inStream.read(data)) > 0) { 
     tempFile.write(data, 0, count); 
} 

因此,這將打開該文件,解析它併發送字節,直到沒有別的東西要發送。我很確定這可以做得更快,但我不知道如何。 Android客戶端只需打開一個到我的IP /端口的套接字並從中讀取數據。任何想法如何使這個更快?

+1

你可以玩8192,但主要是它(nio渠道是替代品,但這可能不會更快)。 '0'對於'read()'來說是一個合法的值,即使還有更多。我也擺脫了'BufferedInputStream',因爲你有自己的緩衝區,而另一個不會有幫助。客戶端代碼的外觀如何? – zapl 2014-12-07 00:45:09

+0

手機是在wifi還是手機?如果在蜂窩上,這可能是預期的 - 你的限制因素是延遲,而不是吞吐量。在蜂窩上建立連接需要很長時間。 – 2014-12-07 00:55:16

+0

另一個想法是,你使用緩衝文件編寫器還是無緩衝?如果沒有緩衝,那可能是問題所在。嘗試對寫入進行註釋以將其限制爲傳輸時間,以隔離問題。 – 2014-12-07 00:58:35

回答

-1

如果你想讓你的android設備從服務器讀取數據,最好使用android AsynTask 並實現doInBackground方法。 通過這種方式,您可以使用org.apache庫的HttpClient建立與服務器的連接,併發出請求並接收響應,在該響應中您可以通過inputStream讀取它。

public String doInBackground() 
{ 
    DefaultHttpClient httpClient = new DefaultHttpClient(); 
    HttpGet httpGet = new HttpGet("www.yourserverip.com"); 
    HttpResponse response = httpClient.execute(httpGet); 
    HttpEntity entity = response.getEntity(); 
    BufferReader reader = new BufferReader(new InputStreamReader(entity.getContent()));' 
    while(reader.readLine!=null) 
    { 
    //Read Something  
    //read Your data 
    } 
/*Note this is just a basic use of httpClient*/ 
/*Also if its a file you really might not use the bufferedReader*/ 
} 

首先,我真的希望我明白你的問題和你真正想達到的目標。

+0

我知道如何從服務器讀取。請參閱編輯問題。我只是覺得5 MB的15秒太慢了,我想知道我的方法是否糟糕,以及是否有任何事情可以使它更快。 – user3141607 2014-12-07 00:56:56

+0

他在談論通過套接字傳輸數據,而不是HTTP請求。而且他並沒有要求在Android上如何去做,而是在問爲什麼事情太慢,這並沒有真正解決。 – 2014-12-07 00:57:04

相關問題