【问题标题】:Sending binary files over sockets通过套接字发送二进制文件
【发布时间】:2014-04-07 23:09:25
【问题描述】:

我想使用套接字将二进制文件从客户端发送到服务器。 这是我读取文件的代码:

  size_t buffer_size = 512;
        std::fstream myfile;
        myfile.open(filePath[i], std::ios::in | std::ios::out | 
                     std::ios::binary);
        std::vector<char> myBuffer(512);
        std::ostream_iterator<char> osIt(std::cout);
        //std::ifstream myfile(filePath[i]);
        while (myfile)
        {
            myfile.read(&myBuffer.front(), buffer_size);
            if (!myfile)
            {
                myBuffer.resize(myfile.gcount());
            }
            std::string msg(myBuffer.begin(), myBuffer.end());
            doLog("sending message");
            sout << locker << "\n  " << msg.c_str() << unlocker;
            q_.enQ(msg);
            ::Sleep(10 * id());  // sleep time increases with each    
                             addition Sender
            if (pSt->status() == "bad")
                break;
        }

我正在使用 BLOCKING 队列,并且还通过 bloxk 读取文件块,每个块大小为 512。

这是我在服务器端保存文件的代码:

                            msg = q_.deQ();
            std::ofstream myStream;

                   myStream.open("../Test/Client1/Received_Files/darkKnight.jpeg",  
                            std::ios::out | std::ios::app | std::ios::binary);
            myStream << msg;
            if (msg == "stop\n"){
                myStream.close();
            }

我无法打开创建的输出图像。

【问题讨论】:

    标签: sockets c++11 binaryfiles fstream ofstream


    【解决方案1】:
    • 字符串不是二进制数据的容器。只需读取和写入字节。
    • 我不会为此使用流类,或者实际上不会使用 read()、write()、send() 和 recv() 之上的任何东西,除非您有适当的套接字类库可用。

    【讨论】:

      猜你喜欢
      • 2011-12-03
      • 1970-01-01
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-23
      • 2013-08-21
      • 2012-10-11
      相关资源
      最近更新 更多