grpc通信 c++ vs2015代码

grpc vs配置参考:https://blog.csdn.net/wangxudongx/article/details/104233213
vs配置过程出现问题的一些解决:https://blog.csdn.net/xie1xiao1jun/article/details/52514206

服务端

//服务端
#include "grpcpp\grpcpp.h"
#include "hello.pb.h"
#include "hello.grpc.pb.h"
#include<iostream>

using grpc::Server;   //声明服务类型
using grpc::ServerBuilder;  //声明创建服务的类
using grpc::ServerContext; 
using grpc::Status;
using helloworld::HelloRequest; //服务请求类型
using helloworld::HelloReply;   //服务回话类型
using helloworld::Greeter;

class Server_hello final: public Greeter::Service
{
	Status SayHello(ServerContext* context, const HelloRequest* request, HelloReply* reply)
	{
		std::string reply_txt("Hello ");
		std::string reply_txt1(" by service");
		reply->set_message(reply_txt + request->name() + reply_txt1);
		return Status::OK;
	}
};

void RunServer() {
	std::string server_address("0.0.0.0:50071");
	Server_hello 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) {

	std::cout << "start service" << std::endl;
	RunServer();

	return 0;
}

客户端

//客服端
#include "grpcpp\grpcpp.h"
#include "hello.pb.h"
#include "hello.grpc.pb.h"
#include <iostream>

using grpc::Channel;
using grpc::ClientContext;
using grpc::Status;
using helloworld::HelloRequest;
using helloworld::HelloReply;
using helloworld::Greeter;

class GreeterClient {
public:
	GreeterClient(std::shared_ptr<Channel> channel): stub_(Greeter::NewStub(channel)) {}

	// 组装客户端的有效载荷,发送它并返回响应
	//来自服务器。
	std::string SayHello(const std::string& user) 
	{
		// Data we are sending to the server.
		HelloRequest request;
		request.set_name(user);

		// 我们期望来自服务器的数据的容器。
		HelloReply reply;

		// 客户端的上下文。 它可以用来传达额外的信息给
		// 服务器和/或调整某些 RPC 行为。
		ClientContext context;

		// 实际的 RPC。
		Status status = stub_->SayHello(&context, request, &reply);

		// 根据其状态采取行动。
		if (status.ok()) {
			return reply.message();
		}
		else {
			std::cout << status.error_code() << ": " << status.error_message()
				<< std::endl;
			return "RPC failed";
		}
	}

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

int main(int argc, char** argv) {
	// 实例化客户端。 它需要一个通道,实际的 RPC 从中
    // 被创建。 此通道建模与端点的连接(在这种情况下,
    // 本地主机在端口 50051)。 我们表明频道未通过身份验证
    //(使用 InsecureChannelCredentials())。
	GreeterClient greeter(grpc::CreateChannel("localhost:50071", grpc::InsecureChannelCredentials()));
	std::string user("world");
	std::string reply = greeter.SayHello(user);
	std::cout << "Greeter received: " << reply << std::endl;

	std::cin.get();
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值