【发布时间】:2009-06-24 15:19:19
【问题描述】:
在阅读了一些相关问题后,我决定使用tpl library 序列化我的结构,以便通过套接字发送和接收它们。我无法理解如何使用套接字发送和接收 tpl 图像。当我调用 tpl_dump 函数时,我在服务器端收到一个段错误错误。
我知道套接字在两端都在工作,因为我之前使用代码来回发送字符串。我还能够使用 tpl 在客户端上创建和读取 tpl 图像,没有任何问题。
这不是我最终想要来回发送的结构,但我希望弄清楚这个示例,以便将来可以这样做。我知道我在传入缓冲区和tpl_dump 之间处理了一些错误。我仍在学习 C(正如我之前的问题所证明的那样),所以如果我的代码中有明显的错误,我深表歉意。
修改
Nikolai 指出的问题已在下面的代码中得到纠正。但是服务器代码记录 error: tpl_load to non-root node 并且仍然在 tpl_unpack(tn, 0); 处出现段错误
客户代码:
tpl_node *tn;
void *addr;
size_t len;
struct ci {
char c;
int i;
};
struct ci sample = {'a', 1};
tn = tpl_map("S(ci)", &sample); /* pass structure address */
tpl_pack(tn, 0);
tpl_dump(tn, TPL_MEM, &addr, &len );
tpl_free(tn);
send(sockfd, addr, len, 0);
服务器代码:
if ((nbytes = recv(i, buf, sizeof buf, 0)) <= 0) {
//error handling
} else {
tpl_node *tn;
struct ci {
char c;
int i;
};
struct ci recieve;
tpl_map("S(ci)", &recieve);
tpl_load(tn, TPL_MEM, &buf, &nbytes );
tpl_unpack(tn, 0);
tpl_free(tn);
如果这会派上用场 - tpl user's guide
【问题讨论】:
标签: c sockets serialization