这里很新。希望你们可以帮助我:<
我在验证用户时遇到问题。最终目标是拥有以下内容:
1)客户端连接到服务器
2)服务器向客户端发送用户名请求,客户端用用户名
回复3)服务器向客户端发送密码请求,客户端回复密码
4)服务器对某些内容进行检查(目前仅进行一次测试比较,所以"如果用户名==测试,密码==测试"
5)这会向客户端发送一个值(如1,登录,0表示已登录),如果登录为1,则客户端退出while循环并执行其余代码,否则如果为0则客户端再次循环,直到用户退出程序,或输入正确的用户名/密码。
最后,程序将从一个看起来像
的文本文件中读入用户名/密码user,pass / user1,pass1 - 在这种情况下,服务器只会与所有行和密码进行比较,但这是后来的另一个问题。
现在我的客户端/服务器要求输入用户名和密码,您可以输入它们,但我无法获得第4步和第4步。 5工作。 (1为登录,0为不正确的用户名/密码)我觉得我错过了插座的东西。比如每次发送后清除一个套接字?
我的代码如下:
server.c:
while (!loggedIn) {
while (!infoEntered) {
// Get username and password and makesure they're correct
send(client, "Please enter a username:\n", 256, 0);
if (recv(client, username, 256, 0) > 0) {
// Received username, so ask for password
send(client, "Please enter a password:\n", 256, 0);
if (recv(client, password, 256, 0) > 0) {
// Username and password have been entered ready for checking
infoEntered = 1;
break;
} else {
printf("Could not receive password for %s", username);
close(client);
}
} else {
printf("Could not receive the username, please reconnect and try again.");
close(client);
}
}
// send a test message
send(client, "hello", 256, 0);
char test[256];
recv(client, test, 256, 0);
printf("Got: %s", test);
// I need to check login here
// Check map/hashmap of username and passwords
// If the username is in the file, confirm password
// If password is correct, send a signal to the client
// Then set logged in to 1, to start the hangman game
loggedIn = 1;
}
完整的server.c代码:http://pastebin.com/37YiZgWu
client.c:
// Loop until the user logs in or closes the program
while (!loggedIn) {
// Get the username
receive = recv(server, serverR, sizeof(serverR), 0);
printf("Server: %s", serverR);
fgets(client, 255, stdin);
if (send(server, client, sizeof(client), 0) > 0) {
// Sent username to server so send password now
receive = recv(server, serverR, sizeof(serverR), 0);
// Get the password and send it
printf("Server: %s", serverR);
fgets(client, 255, stdin);
if (send(server, client, sizeof(client), 0) > 0) {
char loggedReply[256];
recv(server, loggedReply, 256, 0);
if (loggedReply == "hello") {
send(server, "got into logged reply", 256, 0);
loggedIn = 1;
} else {
loggedIn = 0;
}
}
}
}
完整的客户代码:http://pastebin.com/p5ZFGhDJ
先谢谢了:(我通常不会寻求帮助,但我花了2个小时试图让它正常工作......
编辑回复了以下关于澄清"最后一部分":
的评论"最后一部分是实际的身份验证部分。所以在服务器收到用户名/密码之后的所有内容。在此之后我做的任何其他发送/接收只是简单地不工作而我不知道为什么。我需要服务器运行if语句来比较用户名/密码,然后在两种情况下,向客户端发送一个信号,所以一个单词,整数,布尔值,等等,在这种情况下客户端将等待这个信号(看看它是否已登录),然后如果登录,则在循环中退出登录,运行程序,或者重新循环询问用户名/再次传递"
答案 0 :(得分:0)
答案 1 :(得分:0)
c函数fgets()将换行“\ n”字符作为有效输入。因此,您向服务器发送“用户名”+“\ n”“密码”+“\ n”。 在将sendint发送到服务器之前清理字符串。