Я пытаюсь заставить мой сервер ждать ответа моего клиента.Я пытаюсь получить имя пользователя и пароль от моего клиента.Это функция моего клиента:
/* 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;
}
Что-то мне не хватает?Я просто хочу, чтобы мой код запрашивал у пользователя имя пользователя, а затем запрашивал его пароль.