Попытка заставить сервер ждать клиента (Socket Programming) - PullRequest
0 голосов
/ 21 сентября 2018

Я пытаюсь заставить мой сервер ждать ответа моего клиента.Я пытаюсь получить имя пользователя и пароль от моего клиента.Это функция моего клиента:

 /* 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;

}

Что-то мне не хватает?Я просто хочу, чтобы мой код запрашивал у пользователя имя пользователя, а затем запрашивал его пароль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...