Передача файлов с использованием gRP C ++ - PullRequest
1 голос
/ 02 апреля 2020

Моя цель - создать файл и затем использовать потоковое соединение для отправки файла на сервер с помощью gRPC ++. Что-то не так в моем коде? Вызов RP C для загрузки файла не выглядит успешным.

Мой прототип имеет единственный объект "байты"

message FileContent {

  bytes content = 1;

}

Код клиента

char *buffer = new char[2048];
// Open a stream-based connection with the gRPC server

std::unique_ptr<ClientWriter<FileContent> > writer(this->service_stub->Store(&context, &fileack));
// send the file name to the server

filecontent.set_content(filename);
std::cout << "Client: RPC call with File Name:" << filecontent.content() << endl;
writer->Write(filecontent);

// Get a file handle for the file we want to upload and the file length 
fileStream.open(filename, ios::binary);
while (!fileStream.eof())
{
     std::this_thread::sleep_for(std::chrono::milliseconds(100));
     filecontent.clear_content();
     fileStream.read(buffer,2048);
     filecontent.set_content(std::string(buffer, 2048));
     writer->Write(filecontent);
}

Код сервера

   Status Store(ServerContext* context, ServerReader<FileContent>* reader, FileAck* fileack) override 
{
         FileContent filecontent;
         ofstream fileStream;
         std::string serverfilepath;
         if (fileStream.is_open())
         {
             std::cout << "Reading Data";
             while (reader->Read(&filecontent))
             {
                 fileStream << filecontent.mutable_content();
             }

               fileStream.close();

         }

         else
         {
            reader->Read(&filecontent);
            fileStream.open(serverfilepath, ios::binary);
         }

         return Status::OK;
        }

Первый вызов RP C для отправки имени файла работает, но последующие вызовы RP C

не удаются. Я не вижу сервера, получающего какие-либо данные. Мой код выглядит нормально?

...