测试源码:
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!!!");