0

クライアントから与えられた数値の平均を表示するソケット プログラミングでコンピューティング エンジン用のサーバー プログラムを作成しています。クライアントの私のコード:

main()
{
    //socket
    //connect
    gets(msg);
    f=sscanf(msg,"%f",&num);
    write(sockfd,msg,strlen(msg));
    while ((n1=read(sockfd,result,Z))>0) {
        write(1,result,n1);
    }
}

サーバー内:

while((rfd=read(sockfd,buff,Z))>0) {
    sscanf(buff,"%f",&num);
    sum=sum+num;
}
sum=sum/n;
snprintf(res,Z,"%f",sum);
write(sockfd,res,strlen(res));

プログラムが動作しません。書き込みサーバーを削除すると、機能しています。サーバーからクライアントにサンプルメッセージを送信して、すべての計算を削除すると、機能します。誰がエラーが何であるか教えてもらえますか

4

1 に答える 1

0
  1. プロトコル エラー。クライアントは 1 つの数値を書き込んでいますが、サーバーは無数の数値を読み取っています。(a) サーバーを 1 回読み取るように変更するか、(b) 読み取る数値の数を先に送信するか、または (c) 数値を書き込んだ後、応答を読み取る前に出力用のクライアント ソケットをシャットダウンする必要があります。

  2. 他の方向にも同様のプロトコル エラーがあります。サーバーは 1 つの応答を書き込んでいますが、クライアントは永遠にループしています。サーバーは、応答を書き込んだ後、ソケットを閉じる必要があります。

  3. サーバーで read() の後に `buff[rfd] = 0' を追加する必要があります。そうしないと、sscanf はどこで停止するかわかりません。

于 2012-10-01T23:37:12.503 に答える