IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> grpc通信 c++ vs2015代码 -> 正文阅读

[C++知识库]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;
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-27 13:54:18  更:2021-09-27 13:56:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/24 1:41:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码