Google_Protobuf协议——Protobuf发送接收数据类型

测试源码:
https://github.com/zxworkSW/google_Protobuf_Test.git

发送的数据为单个数据类型

proto消息体定义

message TestSend {
    string  sname               = 1;
    uint32  u32number           = 2;
    bool    isSerializeArray    = 3;
}

发送数据

    bool CProtobuf::protosend(const std::string &name, int number)
    {
        if (name.empty())
            return false;

        prototest::TestSend sendmsg;

        sendmsg.set_sname(name);
        sendmsg.set_u32number(number);
        sendmsg.set_isserializearray(this->isSerializeToArray());

        return this->protobufsend(sendmsg);
    }

接收数据

    bool CProtobuf::protoreceive()
    {
        prototest::TestSend getsand;
        prototest::TestReceive setresand;
        setresand.set_srename("reprotobuf");

        do
        {
            if (!protobufreceive(getsand))
            {
                setresand.set_enumcode(prototest::Recode::ERROR);
                break;
            }

            cout << "sendname = " << getsand.sname() << endl;
            cout << "number   = " << getsand.u32number() << endl;
            cout << "is array = " << getsand.isserializearray() << endl;

            setresand.set_enumcode(prototest::Recode::SUCCESS);

        } while (0);

        return this->protobufsend(setresand);
    }

执行结果

$ ./test.o 
sendname    = String
number      = 0
is array    = 0
re code     = 0
re name     = reprotobuf

发送的数据为数组类型

proto消息体定义

message TestSendArray {
    string              sname           = 1;
    repeated uint32     u32number       = 2;
    repeated string     usernames_array = 3;
}

发送数据

    bool CProtobufArray::protosend(const std::string &name, std::vector<CUserinfo> &Users)
    {
        if (name.empty() || Users.empty())
            return true;

        prototest::TestSendArray sendmsg;

        sendmsg.set_sname(name);

        std::vector<CUserinfo>::iterator iter = Users.begin();
        while (iter != Users.end())
        {
            sendmsg.add_u32number(iter->get_number());
            sendmsg.add_usernames_array(iter->get_username());
            iter++;
        }
        sendmsg.add_usernames_array("end array");

        return this->protobufsend(sendmsg);
    }

接收数据

    bool CProtobufArray::protoreceive()
    {
        prototest::TestSendArray getsand;
        prototest::TestReceive setresand;
        setresand.set_srename("reprotobuf");
        prototest::Recode revalue = prototest::Recode::ERROR;

        try
        {
            if (!protobufreceive(getsand))
                throw;

            cout << "sendname = " << getsand.sname() << endl;

            int numberlen = getsand.u32number_size();
            if (numberlen < 0)
                throw std::string("get u32number len is error!!!");

            for (int i = 0; i < numberlen; i++)
            {
                cout << "number   = " << getsand.u32number(i) << endl;
            }

            int nameslen = getsand.usernames_array_size();
            if (nameslen < 0)
                throw std::string("get usernames_array len is error!!!");

            
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值