0

TCP 経由でファイルからホスト マシンに制御コマンドを送信し、応答を受信するコンソール アプリケーションを cpp で作成しています。これらの情報はすべて画面に表示され、ファイルに記録されます。これが実際の問題です。固定長を設定しようとしても、何らかの理由で出力文字列にジャンクが格納されているようです。

編集:コードをクリーンアップし、recv() の戻り値を処理しました。私がまだ得ていない唯一のことは、ログファイルの2 番目のrecv 行ががらくたでいっぱいになっていることです。たぶん、あなたの一人が問題を見つけることができます。

        string cmd="";
        char *sendstr=(char*)cmd.c_str();
        fflush(stdin);
        int n = 1, total = 0;
        char temp[1024];
        string inStr;
        if(cmdin.is_open())
        {           
            while(!cmdin.eof())
            {
                total=0;
                cmd=fread();
                send(serverPC, sendstr, (int)strlen(sendstr),0);
                n=recv(serverPC,&temp[total],sizeof(temp)-total-1,0); // FIX THIS
                total+=n;
                temp[total]='\0';
                inStr=temp;
                fwrite(inStr,cmd);
            }
            cout << "Data successfully sent!\n";
        }
        else{
            cerr<<"can't find 'cmd.cfg' file"<<endl;
        }

私が期待する出力:

<11:40:00> INIT
received: VELO=0.00km/h  DOT=FORW  
----

これは私が得るものです:

<10:05:56> INIT
received: VELO=0.00km/h  DOT=FORW  
----
<10:05:56> VELO=50.00
received: VELO=0.00km/h  DOT=FORW  VELO=0.00km/h  DOT=FORW  VELO=0.00km/h
DOT=FORW  VELO=0.00km/h  DOT=FORW  VELO=0.00km/h  DOT=FORW  VELO=0.00km/h  DOT=FORW  
VELO=0.00km/h  DOT=FORW  
----
<10:05:56> VELO=100.00
received: VELO=50.00km/h  DOT=FORW  
----
<10:05:56> DOT=BACK
received: VELO=50.00km/h  DOT=FORW  
4

1 に答える 1