0

このコードは、ソケットを使用して「チャット ルーム」プログラムに埋め込まれています。クライアント (myFD) から読み取り、先頭にユーザー名を正常に追加しています。
ただし、書き込みバッファーに余分な文字を書き込む際に問題があります。前回送信したものは保存され、送信もされています。

たとえば、初めて送信する(そして正しく書く)

国連:こんにちは。

しかし、2 回目の試行で、「NOT」と書くと、送信されるメッセージは次のようになります。

国連: NOTlo

cout ステートメントは、最後に「lo」がなくても正しく「cout's」になりますが、クライアントは最後に「lo」を受け取ります。私は単純なものを見落としていますか?

以下のコード:

while ( (amount_read = read(myFD, buffer, 1024)) > 0)
{
    total = 0;
    strcpy(second, "");
    strcpy(second, username);
    total += unLength;
    strcat(second, ": ");
    total += 2;
    strcat(second, buffer);//, amount_read);
    total += amount_read;
    cout << second << endl;
    write(myFD, second, total);
}

ありがとう!

4

2 に答える 2

1

あなたの文字列は null で終了していないため、古い文字列を出力します。\0文字列の最後に追加して修正するかbuffer[amount_read]=0、次の反復の前に文字列全体をクリアすることができます。

バッファをクリアするには、 を使用できますmemset (buffer,'\0', 1024)。最速の方法ではないかもしれませんが、ホストされるべきではないゴミやデータを必要以上に長く保存しないようにします。

于 2012-11-30T00:35:47.863 に答える
0

'\0'正しく追加していません。

あなたの送信はこのように見えると思いますwrite(myFD, buffer, strlen(buffer)).0ターミネータ以外のすべてを送信します. おそらくmemset.

buffer[amount_read]=0;おそらくそれを修正します。

于 2012-11-30T00:37:24.517 に答える