2013-06-02 66 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