我试图在套接字上发送长度前缀缓冲区。我正在使用协议缓冲区。我搜索了一下,发现可以使用 CodedOutputStream 中的 WriteVarint32 来实现。但所有示例都使用文件流或提升 asio。正常的套接字发送需要一个 void * 作为缓冲区才能通过套接字发送,但是当使用 boost asio 完成时,我收到以下错误
错误:从类型“boost::asio::const_buffers_1”到类型“void*”的无效转换</p>
我的客户端代码是
Person payload ;
payload.set_log_msg("We are using protobuf");
boost::asio::streambuf b;
std::ostream os(&b);
ZeroCopyOutputStream *raw_output = new OstreamOutputStream(&os);
CodedOutputStream *coded_output = new CodedOutputStream(raw_output);
coded_output->WriteVarint32(payload.ByteSize());
payload.SerializeToCodedStream(coded_output);
delete coded_output;
delete raw_output;
.
.
.
bytecount=send(hsock, (void *) b.data(), 10,0);
我的 message.proto 文件的内容是
message Person {
required fixed64 log_time =1;
required fixed32 log_micro_sec =2;
required fixed32 sequence_no =3;
required fixed32 shm_app_id =4;
required string packet_id =5;
required string log_level=6;
required string log_msg=7;
}
任何人都可以帮助我用其他东西替换 boost::asio::streambuf 以便我可以在普通套接字发送上发送它。该客户端的功能是向服务器发送一些消息。服务器在进行一些格式化后又将它们写入日志文件。
提前谢谢你。