宿題のためにCでクライアント/サーバープログラムを書こうとしています。何が起こるか:接続が確立されますサーバーはクライアントがメッセージを送信するのを待ちますクライアントはユーザーにメッセージを要求し、それを文字列に割り当ててからサーバーに送信します。これは、クライアントの次のコードで実行されます。
while(1){
/* prepare message */
printf ("Please enter the message: ");
bzero (buffer, BUFFERLENGTH); //BUFFERLENGTH is defined as 256
fgets (buffer, BUFFERLENGTH, stdin);
/* send message */
n = write (sockfd, buffer, strlen(buffer));
if (n < 0)
error ("ERROR writing to socket");
bzero (buffer, BUFFERLENGTH);
}
今、私の問題は、このコードが少しぎこちないものを送信していることです。私の知る限り、バッファが空になっていないか、常にBUFFERLENGTHの長さであるとは限らないので、ランダムなジャンクがスタックから読み取られていますか?
サーバーはメッセージを受信し、それを印刷します。クライアントプログラムがスキャンインする"actual string I input"
と、サーバーは次のようなものを出力します。
actual string I input @&^%~&
ただし、端末出力は印刷不可能な文字でいっぱいであり、改行もあります。サーバーのコードは次のとおりです。
n = read (*newsockfd, buffer, BUFFERLENGTH -1);
printf("buffer = %s\n",buffer);
if (n < 0)
error ("ERROR reading from socket");
ただし、whileループを削除しても、これは発生しません。
bzeroについて読んだことがありますが、非推奨であることがわかっているので、memsetを使用する必要があります。しかし、私はそれを試してみました:memset(buffer,0,BUFFERLENGTH);
そして問題はまだ起こります。
バッファにジブリッシュが追加されている理由の説明はありますか?
編集
バッファはクライアントで次のように宣言されます:char buffer[BUFFERLENGTH];
`