android - 通过 WiFi 将图像从 Android 发送/保存到 Windows 时数据过多

标签 android c++ windows image wifi

我有一个 Android 应用程序 (Android 5.0),它应该使用 Windows 7 上的 C++ 程序(使用 boost 库实现)通过 WiFi 将图像发送到笔记本电脑。

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

一个例子:

图片已发送:
长度 273650
台词 1975
单词 31088

图像接收和保存:
长度 274663
台词1979
单词 31088

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

安卓代码

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();
            }
        }
    });
}

知道可能是什么问题吗?我对套接字编程比较陌生。感谢您的帮助。

最佳答案

问题不太可能出在套接字上,它应该是关于将二进制数据写入文本。

尝试替换

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

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

编辑:为什么要以追加模式打开文件?您应该为每个文件写入一个 PNG 图像。

关于android - 通过 WiFi 将图像从 Android 发送/保存到 Windows 时数据过多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36280042/

相关文章:

c++ - 什么是从 visual c++ 到 sql 的好 api

c++ - 在 C++ 中删除制表符和空格

c++ - 如何在 C++ 代码块窗口中使用 boost 1.63 库?

c++ - 打开大量文件时 Windows CreateFile 速度缓慢

java - 将二进制文件保存到/<<external-storage>>/Android/data/<<其他一些包>>

Android Realm for 循环 - RealmResults 在循环期间被删除

c# - 在 C# 中访问 android 设备

java - 倒数计时器? (毫秒精度)?

c - 尝试用 cl.exe 编译

未调用 C++11 move 构造函数,首选默认构造函数