多重化されたクライアント/サーバーとサーバーを作成しています。クライアントから LOGIN コマンドを受信した後、アカウント データを待機しますが、空の構造体を受信し、その理由がわかりません。これは私のコードです: サーバー:
関数 sleep() を使用しようとしましたが、機能しませんでした。助言がありますか?
多重化されたクライアント/サーバーとサーバーを作成しています。クライアントから LOGIN コマンドを受信した後、アカウント データを待機しますが、空の構造体を受信し、その理由がわかりません。これは私のコードです: サーバー:
関数 sleep() を使用しようとしましたが、機能しませんでした。助言がありますか?
ここは夜なので、すべてのコードを見ていません!!! :)
しかし、関数 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 を返します。:)
入っているかもしれません
if( (fd = accept(......)) <0)
この割り当ても問題を引き起こすと思います.アプリケーションでそれらを実行する方法がわからない場合があります.判断の前に割り当てを行うことができます.もちろん、これは私の考えです.私も同じ問題を抱えていたからです. . これがあなたのお役に立てば幸いです.または、解決方法を見つけるのに役立ちます. 教えて、ありがとう!
解決しました!問題は、最初の write() に定数を渡していたことでした。write(socket, (comm_t *)LOGIN, sizeof(comm_t));
最初に「LOGIN」を変数に保存してから、次のように渡す必要がありました。write(socket, &command, sizeof(comm_t));