我正在写一个多路复用的客户端/服务器和我的服务器,在从客户端收到LOGIN命令后,等待帐户数据,但收到一个空结构,我不知道为什么。这是我的代码: Server:
我尝试使用函数sleep(),但它没有用。 有什么建议吗?
答案 0 :(得分: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
当两个字符串相等时,strcmp函数返回0! :)
答案 1 :(得分:0)
可能在
if( (fd = accept(......)) <0)
我觉得这个任务变得麻烦也会引起问题,有时候你不知道如何在应用程序中运行。你可以在判断之前做出分析。当然,这是我对此的看法。因为我有同样的问题。 我希望这对你有所帮助。或者帮助你找到解决问题的方法。告诉我,谢谢!
答案 2 :(得分:0)
解决!问题是我在第一个write()中传递了一个常量:write(socket, (comm_t *)LOGIN, sizeof(comm_t));
虽然我必须首先在变量中保存“LOGIN”然后以这种方式传递它:write(socket, &command, sizeof(comm_t));