通过zeromq发送protobuf-c数据

通过zeromq发送protobuf-c数据,c,protocol-buffers,zeromq,C,Protocol Buffers,Zeromq,我使用protobuf-c在0mq上与客户机和服务器代码进行通信 下面是客户代码截取 在服务器端,我有以下代码 #include "generator.h" int main (void) { // Socket to talk to clients void *context = zmq_ctx_new (); void *responder = zmq_socket (context, ZMQ_REP); int rc = zmq_bind (responder, "tcp:/

我使用protobuf-c在0mq上与客户机和服务器代码进行通信

下面是客户代码截取

在服务器端,我有以下代码

#include "generator.h"

int main (void)
{
    //  Socket to talk to clients
void *context = zmq_ctx_new ();
void *responder = zmq_socket (context, ZMQ_REP);
int rc = zmq_bind (responder, "tcp://*:5555");
uint8_t buffer[MAX_MSG];
int i=0;
assert (rc == 0);
zmq_recv (responder, buffer, MAX_MSG, 0);
printf ("recieved -> %s\n",buffer);
LogMsg *ptr_msg; 
ptr_msg = log_msg__unpack(NULL,i,buffer); // Deserialize the serialized input
if (ptr_msg == NULL)
{ // Something failed
    fprintf(stderr,"error unpacking incoming message\n");
    return 1;
}

log_msg__free_unpacked(ptr_msg,NULL);
    return 0;
}
但是当服务器收到消息时,它给出了以下错误

recieved -> 
B1  127.0.0.1??"HELLO/?? 
message 'Log_msg': missing required field 'name'
供参考。proto文件如下所示

message Log_msg
{
required string name=1; //Node Name
optional string IP=2 [default = "127.0.0.1"]; //Node IP Addr
optional int32 PID=3 [default = 9999]; //Process ID
optional string level=4 [default = "INFO"]; //Log Info Level
optional int64 datim=5; //UNIX Time Stamp
optional string msg=6; //Log message
}


我假设当我在电线上传输它时,它就会被破坏。你知道我怎样才能把它寄出去吗。在线例子展示了C++。我需要C。

zmq\u send和zmq\u recv似乎处理zmq\u msg\u t结构,而不仅仅是缓冲区。 也许你应该尝试创建这样的结构,而不仅仅是发送缓冲区? 请参见和中的示例

message Log_msg
{
required string name=1; //Node Name
optional string IP=2 [default = "127.0.0.1"]; //Node IP Addr
optional int32 PID=3 [default = 9999]; //Process ID
optional string level=4 [default = "INFO"]; //Log Info Level
optional int64 datim=5; //UNIX Time Stamp
optional string msg=6; //Log message