android使用套接字发送bmp

Posted

技术标签:

【中文标题】android使用套接字发送bmp【英文标题】:android sending bmp using sockets 【发布时间】:2013-06-02 17:05:53 【问题描述】:

我正在尝试使用套接字发送 bmp 图像。我在android上有这样的代码:

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("Done") )。只有当我关闭 android 程序时,它才会到达最后一行并且 bmp 成功打开。问题是in_.read在android完成传输后等待,我无法让它工作。

【问题讨论】:

【参考方案1】:

您永远不会关闭设备端的套接字/OutputStream,因此 PC 端不知道没有更多数据,因此它只是在 while 循环中旋转,一次读取 0 个字节。

另外,如果您要使用我的解决方案,请在您的previous thread. 中将我标记为已接受的答案

【讨论】:

那么我应该如何让它工作呢?其他软件如何使用套接字发送数据? 如果您从 Android 发送的只是位图,那么在完成后只需说 os.close()。如果您将在位图之后发送比在位图数据之前带有长度标记的数据更多的数据。这样你就知道在 PC 端要读取多少字节。

以上是关于android使用套接字发送bmp的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 java 套接字将图像从 android studio 发送到 pc,filePath 返回 null

通过 java android 套接字发送图像

Android 套接字连接组合发送

从android客户端通过套接字发送后收到黑色图像

android - LAN 套接字编程 - 获取空指针和地址使用异常

在 Android Studio 中使用套接字的异常