首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过套接字发送avro(avro c)编码数据

通过套接字发送avro(avro c)编码数据
EN

Stack Overflow用户
提问于 2013-10-21 06:32:28
回答 1查看 661关注 0票数 0

通过套接字发送avro(avro c)编码的数据我正在尝试通过套接字发送一个avro编码的数据,并将其转换成字节数组(使用memcpy).What,如下所示

/client侧: client.c/

代码语言:javascript
复制
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侧:server.c/

代码语言:javascript
复制
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

但是它没有得到anything...when,我试图解码和打印clent.c本身,它是在通过套接字发送后得到printed.But,它无法检索。

EN

回答 1

Stack Overflow用户

发布于 2013-10-21 06:34:38

temp所指向的数据实际上不是一个字符串,因此您不能在其中使用像strlen这样的字符串函数。

考虑一下,如果中间的一个字节是零(即字符串终止符'\0'),则函数会查找字符串何时结束,因此将停止在那里进行处理。

在接收端,您还有另一个问题,就是使用sizeof(recv_data),它将始终是48字节,这取决于您是在32位或64位平台上。sizeof运算符是一个只编译时的运算符,对于指针,它返回指针的大小,而不是它所指向的。

在接收端,您可能会遇到一个更糟糕的问题,即告诉recvfrom最多接收1024字节,而不是sizeof(t_msg).This,如果sizeof(t_msg)小于1024,则recvfrom可能会导致recvfrom写入超出分配数据的数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19487644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档