0

我在循环中有一个 TCP send() 命令。我注意到我发送的每条消息都只是附加到先前发送的消息的末尾。我不知道为什么。我已经尝试过 memset 和 bzero 来清除 my 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);
    }
}

然后,在接收端,我有这个代码:

char incoming_lsp[128];
bzero(incoming_lsp, sizeof(incoming_lsp));
recv(newfd[i], &incoming_lsp, sizeof(incoming_lsp), 0);

// this is where I can see the data being appended
fprintf(logfd, "\tReceived: %s\n", incoming_lsp); 
4

1 回答 1

2

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

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

另请注意,单次调用recv不能保证从send. 您需要检查返回值recv以查看它返回的字节数,在循环中重复调用它,直到您读取目标消息长度或找到目标消息终止符。

于 2013-11-12T07:47:52.037 回答