跳转到帖子
登录关注  
墨香年少

windows下qt和linux下c++如何使用qrpc通信

已推荐帖子

1. 设置开发环境

Windows 环境(Qt)

安装 Qt 和 Qt Creator:

下载并安装 Qt Creator。

确保安装 Qt 的编译工具(如 MinGW 或 MSVC)。

安装 gRPC 和 Protobuf:

使用 vcpkg 或手动安装 gRPC 和 Protobuf。对于 vcpkg,首先安装 vcpkg,然后运行以下命令:

vcpkg install grpc protobuf

配置 Qt 项目以使用 vcpkg:

在 CMakeLists.txt 中添加:

set(CMAKE_TOOLCHAIN_FILE "C:/path/to/vcpkg/scripts/buildsystems/vcpkg.cmake")

Linux 环境(C++)

安装 gRPC 和 Protobuf:

在 Linux 上安装所需库:

sudo apt-get update
sudo apt-get install -y build-essential autoconf libtool pkg-config
git clone --recurse-submodules -b v1.57.0 https://github.com/grpc/grpc
cd grpc
mkdir -p cmake/build
cd cmake/build
cmake -DgRPC_INSTALL=ON -DgRPC_BUILD_TESTS=OFF -DCMAKE_BUILD_TYPE=Release ../..
make -j
sudo make install

确保 Protobuf 也安装成功:

sudo apt-get install -y protobuf-compiler

2. 定义 Protobuf 文件

创建一个 Protobuf 文件,定义服务和消息。

syntax = "proto3";

package example;

service ExampleService {
  rpc SayHello (HelloRequest) returns (HelloResponse);
}

message HelloRequest {
  string name = 1;
}

message HelloResponse {
  string message = 1;
}

3. 生成 gRPC 代码

在两种环境中,使用 protoc 工具生成 gRPC 和 Protobuf 的 C++ 代码:

protoc --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_cpp_plugin` example.proto
protoc --cpp_out=. example.proto

4. 实现 gRPC 服务器(Linux C++)

创建一个 gRPC 服务器应用程序来响应客户端请求。

#include <iostream>
#include <memory>
#include <string>
#include <grpcpp/grpcpp.h>
#include "example.grpc.pb.h"

using grpc::Server;
using grpc::ServerBuilder;
using grpc::ServerContext;
using grpc::Status;
using example::ExampleService;
using example::HelloRequest;
using example::HelloResponse;

class ExampleServiceImpl final : public ExampleService::Service {
    Status SayHello(ServerContext* context, const HelloRequest* request, HelloResponse* response) override {
        std::string prefix("Hello ");
        response->set_message(prefix + request->name());
        return Status::OK;
    }
};

void RunServer() {
    std::string server_address("0.0.0.0:50051");
    ExampleServiceImpl service;

    ServerBuilder builder;
    builder.AddListeningPort(server_address, grpc::InsecureServerCredentials());
    builder.RegisterService(&service);
    std::unique_ptr<Server> server(builder.BuildAndStart());
    std::cout << "Server listening on " << server_address << std::endl;
    server->Wait();
}

int main(int argc, char** argv) {
    RunServer();
    return 0;
}

5. 实现 gRPC 客户端(Windows Qt)

创建一个 Qt 项目并实现 gRPC 客户端功能。

#include <QCoreApplication>
#include <iostream>
#include <grpcpp/grpcpp.h>
#include "example.grpc.pb.h"

using grpc::Channel;
using grpc::ClientContext;
using grpc::Status;
using example::ExampleService;
using example::HelloRequest;
using example::HelloResponse;

class ExampleClient {
public:
    ExampleClient(std::shared_ptr<Channel> channel) : stub_(ExampleService::NewStub(channel)) {}

    std::string SayHello(const std::string& user) {
        HelloRequest request;
        request.set_name(user);

        HelloResponse response;
        ClientContext context;

        Status status = stub_->SayHello(&context, request, &response);

        if (status.ok()) {
            return response.message();
        } else {
            std::cout << "RPC failed" << std::endl;
            return "RPC failed";
        }
    }

private:
    std::unique_ptr<ExampleService::Stub> stub_;
};

int main(int argc, char *argv[]) {
    QCoreApplication a(argc, argv);

    ExampleClient client(grpc::CreateChannel("localhost:50051", grpc::InsecureChannelCredentials()));
    std::string user("world");
    std::string reply = client.SayHello(user);
    std::cout << "Greeter received: " << reply << std::endl;

    return a.exec();
}

6. 编译和运行

Windows 下

打开 Qt Creator,加载项目并配置为使用 CMake 和 vcpkg。

构建并运行客户端应用程序。

Linux 下

使用 g++ 或 cmake 构建服务器应用程序。

运行服务器,确保它监听在合适的端口。

7. 测试通信

确保服务器在 Linux 上运行,然后在 Windows 上运行客户端,查看消息传递是否成功。调试任何连接问题可能需要查看网络设置和防火墙配置。


目之所及,皆是回忆,心之所想,皆是过往

分享这篇帖子


链接帖子
分享到其他站点

创建帐户或登录来提出意见

你需要成为会员才能提出意见

创建帐户

注册成为会员。只要几个简单步骤!

注册帐户

登录

已有帐户? 请登录。

现在登录
登录关注  

×
×
  • 创建新的...

重要信息

注册必须使用2-8个中文汉字作为账号