0

ループ内に 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);
    }
}

次に、受信側には、次のコードがあります。

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への 1 回の呼び出しが から1 つの完全なバッファを返すことは保証されないことにも注意してくださいsend。からの戻り値をチェックして、返されるrecvバイト数を確認し、ターゲット メッセージの長さを読み取るか、ターゲット メッセージ ターミネータを見つけるまで、ループで繰り返し呼び出す必要があります。

于 2013-11-12T07:47:52.037 に答える