2013-06-02 128 views
0

我試圖使用套接字發送bmp圖像。我已經在Android這樣的代碼:android使用套接字發送bmp

ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
MainActivity.bmp.compress(Bitmap.CompressFormat.JPEG, 20, 
       stream); 
byte[] byteArray = stream.toByteArray(); 
OutputStream os = echoSocket.getOutputStream(); 
os.write(byteArray,0,byteArray.length); 
os.flush(); 

並在PC上:

InputStream in_ = clientSocket.getInputStream(); 
OutputStream out_ = new FileOutputStream("filename.bmp"); 
final byte[] buffer = new byte[1024]; 
int read = -1; 
int i = 0; 
while ((read = in_.read(buffer)) != -1) { 
out_.write(buffer, 0, read); 
System.out.println(i); 
i++; 

} 

in_.close(); 
out_.close(); 


System.out.println("Done"); 

它永遠不會獲取最後一行(的println( 「完成」))。它只有當我關閉android程序時,它會到最後一行,併成功打開bmp。問題是android完成傳輸後in_.read等待,我無法使它工作。

回答

1

您從不關閉設備端的socket/OutputStream,因此PC端不知道沒有更多的數據,因此它只是在while循環中一次讀取0個字節。

另外,如果你打算使用我的解決方案,請註明我在你previous thread.

+0

,所以我應該怎麼使它工作接受的答案?其他軟件如何使用套接字發送數據? –

+0

如果你從Android發送的所有內容都是位圖,那麼在完成後簡單地說os.close()。如果您將在位圖之後發送更多數據,而不是使用長度標記在位圖數據之前發送數據。這樣你就可以知道在PC端讀取多少字節。 – zienkikk