C 循环中的send()命令只是不断追加数据

C 循环中的send()命令只是不断追加数据,c,sockets,C,Sockets,我在循环中有一个TCP send()命令。我注意到我发送的每一条消息都只是附加到先前发送的消息的末尾。我不知道为什么。我尝试了memset和bzero来清除我的char*,但得到了相同的结果。有人知道为什么吗 char *lsp = malloc(128); for (i=0; i<3; i++) { memset (lsp, 0, 128); // also tried bzero here lsp_builder(lsp, this_router->label

我在循环中有一个TCP send()命令。我注意到我发送的每一条消息都只是附加到先前发送的消息的末尾。我不知道为什么。我尝试了memset和bzero来清除我的
char*
,但得到了相同的结果。有人知道为什么吗

char *lsp = malloc(128);

for (i=0; i<3; i++) {

    memset (lsp, 0, 128); // also tried bzero here
    lsp_builder(lsp, this_router->label, routing_table, num_hosts-1, ++seq);
    fprintf (logfd, "\tCreated the following lsp: %s\n\n", lsp); //<--looks great

    for (i=0; i<6; i++) {
        send (sockfd[i], lsp, strlen(lsp), 0);
    }
}

如果要发送单个字符串,则需要在消息中包含其空终止符

send (sockfd[i], lsp, strlen(lsp)+1, 0);
//                               ^^

还请注意,对
recv
的单个调用不能保证从
send
返回一个完整的缓冲区。您需要检查
recv
中的返回值,查看它返回多少字节,在循环中重复调用它,直到读取目标消息长度或找到目标消息终止符。

这就解决了问题。我不知道我是否曾经见过那个。谢谢TCP/IP中没有“消息”。TCP/IP是面向流的。此外,还应始终检查
send()
/
write()
返回的值,至少对于套接字,它们不能保证发送/写入尽可能多的数据。您的代码未保存以发送您希望它发送的所有内容。请仔细查看相关手册页。
send (sockfd[i], lsp, strlen(lsp)+1, 0);
//                               ^^