2016-03-29 35 views
1

我有一个Android应用程序(Android 5.0),应该通过WiFi将图像发送到使用Windows 7上的C++程序的笔记本电脑(使用增强库)。通过WiFi将图像从Android发送/保存到Windows时数据太多

当我发送图像时,笔记本电脑会收到Android设备发送的正确字节数。但是,当我想将图像保存到文件中时,保存的字节数比我收到的字节数多。因此,我无法打开它。我收到图像太大或损坏的消息。仔细看看记事本++,二进制数据似乎是正确的,只是在笔记本电脑侧面有太多空行。

为例:

图片Sended:
长度273650
线1975
词31088

图像接收并保存
长度274663条
线1979
词31088

笔记本电脑通过WiFi接收273650字节,但在保存时扩展文件。手动删除线条也不能解决问题。保存的文件中仍然有太多数据。

的Android代码

try { 
    final OutputStream outputStream = streamSocket.getOutputStream(); 
    final ByteArrayOutputStream bufferStream = new ByteArrayOutputStream(); 

    thermalBitmap.compress(Bitmap.CompressFormat.PNG, 100, bufferStream); 

    bufferStream.flush(); 
    (new Thread() { 
     @Override 
     public void run() { 
      super.run(); 

      try { 
       synchronized (streamSocket) { 

        bufferStream.writeTo(outputStream); 
        outputStream.flush(); 
       } 

       bufferStream.close(); 

      } catch (IOException ex) { 
       Log.e("STREAM", "Error sending frame: " + ex.toString()); 
      } 
     } 
    }).start(); 

} catch (Exception ex){ 
     Log.e("STREAM", "Error creating PNG: "+ex.getMessage()); 
} 

C++代码

void do_read() 
{ 
    auto self(shared_from_this()); 
    socket_.async_read_some(boost::asio::buffer(data_, max_length), 
     [this, self](boost::system::error_code ec, std::size_t length) 
    { 
     if (!ec) 
     {     
      std::string test = std::string(data_, length); 

      std::ofstream myfile("Test.png", std::ios::app); 
      if (myfile.is_open()) 
      { 
       myfile << test; 
       myfile.close(); 
      } 
     } 
    }); 
} 

任何想法可能是什么问题呢?我对套接字编程比较陌生。每一个帮助表示赞赏。

+0

您当然不应该使用字符串I/O来保存二进制数据。为什么你不直接将图像压缩到套接字输出流?你根本不需要中间的'ByteArrayOutputStream'。这只是浪费时间和空间。 – EJP

+0

我会改变这一点,谢谢你的回复。但它没有解决问题。 – harLfkk

+0

关于流的部分不是问题。这就是为什么我把它发布为评论而不是答案。关于字符串的部分至少是问题的一部分。 – EJP

回答

0

问题不可能是关于套接字,它应该是所有关于二进制数据被写为文本。

尝试

std::ofstream myfile("Test.png", std::ios::app|std::ios::binary); 

编辑替换

std::ofstream myfile("Test.png", std::ios::app); 

:为什么你打开追加模式的文件吗?您应该为每个文件编写一个PNG图像。

相关问题