我正在尝试让服务器等待客户的响应。我正在尝试从客户端获取用户名和密码。这是我的客户功能:
/* Wait for the game to start. */
do {
recv_msg(sockfd, msg);
char username[9], password[9];
if (!strcmp(msg, "USN")){
printf("\nUsername: \n");
scanf("%s", username);
write_server_msg(sockfd, username);
}
if (!strcmp(msg, "PSW")){
printf("\nPassword: \n");
scanf("%c", password);
write_server_msg(sockfd, password);
}
} while ( strcmp(msg, "SRT") );
这是我的服务器端:
void authenticate_process(int cli_sockfd){
/* Authentication Process */
write(cli_sockfd, "USN", sizeof(int));
printf("MADE IT");
char *username;
username = recv_msg(cli_sockfd);
printf("[DEBUG] Client username is %s.\n", username);
write(cli_sockfd, "PSW", sizeof(int));
char *password;
password = recv_msg(cli_sockfd);
printf("[DEBUG] Client Password is %s.\n", password);
write(cli_sockfd, "SRT", sizeof(int));
}
对于客户端,我的终端输出如下:
Username:
morgan
Game over.
我的服务器的终端输出是:
DEBUG] Client username is morgan.
[DEBUG] Client Password is .
我无法使函数正确移入代码的“密码”部分。它以某种方式移入其中,但是从不提示用户输入内容,而是似乎在向前移动。我在服务器端的接收消息功能如下:
char *recv_msg(int sockfd)
{
int length;
char *msg;
msg = (char*) malloc (9);
int n = read(sockfd, msg, 9);
free(msg);
return msg;
}
有什么我想念的吗?我只希望代码提示用户输入用户名,然后提示用户输入密码。