1

多重化されたクライアント/サーバーとサーバーを作成しています。クライアントから LOGIN コマンドを受信した後、アカウント データを待機しますが、空の構造体を受信し、その理由がわかりません。これは私のコードです: サーバー:

オーテンティカ機能:

クライアントログイン機能:

関数 sleep() を使用しようとしましたが、機能しませんでした。助言がありますか?

4

3 に答える 3

1

ここは夜なので、すべてのコードを見ていません!!! :)

しかし、関数 autentica (autentica.c) のコードは strcmp を間違った方法で使用しているようです! これは問題になると思います!

それは:

 while (!feof(file)) {//legge finchè non finisce il file
        fread(&acc_to_cmp, sizeof(acc_to_cmp), 1, file);//recupera un account dal file
        if (strcmp(account.matricola, acc_to_cmp.matricola)) {//se l'utente esiste
            if (strcmp(account.password, acc_to_cmp.password)) {//controlla la password
                write(fd, (comm_t *)OK, sizeof(comm_t));//se coincidono concedi l'accesso
                fclose(file);
                return 1;
            }
            else{//se non coincidono
                write(fd, (comm_t *)WRONG_PASS, sizeof(comm_t));//nega l'accesso
                fclose(file);
                return 0;
            }
        }
    }//se l'utente non esiste

私はそれがあるべきだと思います:

 while (!feof(file)) {//legge finchè non finisce il file
        fread(&acc_to_cmp, sizeof(acc_to_cmp), 1, file);//recupera un account dal file
        if (!strcmp(account.matricola, acc_to_cmp.matricola)) {//se l'utente esiste
            if (!strcmp(account.password, acc_to_cmp.password)) {//controlla la password
                write(fd, (comm_t *)OK, sizeof(comm_t));//se coincidono concedi l'accesso
                fclose(file);
                return 1;
            }
            else{//se non coincidono
                write(fd, (comm_t *)WRONG_PASS, sizeof(comm_t));//nega l'accesso
                fclose(file);
                return 0;
            }
        }
    }//se l'utente non esiste

2 つの文字列が等しい場合、strcmp 関数は 0 を返します。:)

于 2015-04-14T00:22:05.243 に答える
0

入っているかもしれません

    if( (fd = accept(......)) <0)

この割り当ても問題を引き起こすと思います.アプリケーションでそれらを実行する方法がわからない場合があります.判断の前に割り当てを行うことができます.もちろん、これは私の考えです.私も同じ問題を抱えていたからです. . これがあなたのお役に立てば幸いです.または、解決方法を見つけるのに役立ちます. 教えて、ありがとう!

于 2015-04-14T00:22:25.707 に答える
0

解決しました!問題は、最初の write() に定数を渡していたことでした。write(socket, (comm_t *)LOGIN, sizeof(comm_t)); 最初に「LOGIN」を変数に保存してから、次のように渡す必要がありました。write(socket, &command, sizeof(comm_t));

于 2015-04-15T22:29:08.340 に答える