通过套接字发送avro(avro c)编码数据我试图通过套接字将其转换为字节数组(使用memcpy)后通过套接字发送avro编码数据。我所做的是低于通过套接字发送avro(avro c)编码数据
/客户端给出:client.c/
avro_datum_t t_msg = avro_record(temp_schema);
avro_record_set(t_msg, "TIME", time_datum) // encoded like this
...
...
unsigned char *temp=(unsigned char *) malloc(sizeof(t_msg));
memcpy(temp,&t_msg,sizeof(t_msg));//converting to byte array
sendto(sock, &temp, strlen(temp), 0, (struct sockaddr *)&server_addr, sizeof(struct sockaddr));//send to socket
/服务器端:server.c/
avro_datum_t time_datum;
..
..
unsigned char *recv_data=(unsigned char *) malloc(sizeof(t_msg));
avro_datum_t t_msg;
bytes_read = recvfrom(sock,recv_data,1024,0,(struct sockaddr *)&client_addr, &addr_len);
memcpy(bgpmsg1,recv_data,sizeof(recv_data));
if (avro_record_get(t_msg, "TIME", &time_datum) == 0) {
printf("\nHi...0\n");
avro_string_get(time_datum, &p);
fprintf(stdout, "TIME: %s ", p)
}
//trying to decode and print message like this
,但它没有得到任何东西......当我尝试解码和clent.c本身它是通过插座是不能够检索发送后得到printed.But打印..
你能告诉我我必须用什么来代替strlen吗?还有如何检索接收端的数据?我必须做出什么样的改变? –
@HarilalOP当你分配内存时,你已经拥有*的大小。使用它。至于'sizeof(recv_data)'的用法,在检查错误之后,使用你接收到的字节数('bytes_read')。另外,如果您使用TCP,您可能会收到*少于*的请求,因此您需要再次收到。 –
@HarilalOP我个人不了解“avro”函数或消息。我只根据原始问题中提供的代码进行回答。 –