Запись значения Int на сервер преобразует его в -1 в программировании сокетов C - PullRequest
0 голосов
/ 26 сентября 2018

Привет, я пытаюсь написать int со своей клиентской стороны на мой сервер.Моя запись на стороне клиента настроена так:

/* Writes an int to the server socket. */
void write_server_int(int sockfd, int msg)
{
    printf("\n[DEBUG] THIS IS the Message: %d", msg);
    printf("\n[DEBUG] THIS IS size of the Message: %lu", sizeof(msg));


    int n = write(sockfd, &msg, sizeof(msg));
    printf("\n[DEBUG] THIS IS N: %d", n);
    if (n < 0)
        error("ERROR writing int to server socket");

    printf("[DEBUG] Wrote int to server: %d\n", msg);
}

Мой прием на стороне сервера настроен так:

/* Reads an int from a client socket. */
int recv_int(int cli_sockfd)
{
    int msg = 0;
    int n = read(cli_sockfd, &msg, sizeof(msg));

    if (n < 0 || n != sizeof(int)) /* Not what we were expecting. Client likely disconnected. */
        return -1;

    printf("[DEBUG] Received int: %d\n", msg);

    return msg;
}

Я вызываю свои функции отсюда:

while(1) {
        option = menu_screen(sockfd); // Get Menu Screen and Clients Choosen Option
        printf("[DEBUG] User selection menu option: %d\n", option);

        while (option == 1){ // Gameplay Option
            draw_board(board);
            recv_msg(sockfd, msg);
            if (!strcmp(msg, "TRN")) { /* Take a turn. */
                int choice = take_turn_member(sockfd);
                write_server_int(sockfd, choice);
            }
            if (!strcmp(msg, "COX")){
                int coordinates_x = take_turn_coord_x();
                printf("\n[DEBUG] Coordinates X is: %d", coordinates_x);
                write_server_int(sockfd, coordinates_x);
                printf("\n\nMADE IT HERE");
            }
            if (!strcmp(msg, "COY")){
                int coordinates_y = take_turn_coord_y();
                printf("\n[DEBUG] Coordinates Y is: %d", coordinates_y);
                write_server_int(sockfd, coordinates_y);
                printf("\n\nMADE IT HERE");
            }
}

Мой код работает идеально до тех пор, пока он не достигнет здесь write_server_int(sockfd, coordinates_x); из консольного вывода, показывающего, что передаваемое в write_server_int() значение int отправляется на сервер как -1.

[DEBUG] Received message: COX
Enter Row Tile Coordinates A-I : A

[DEBUG] Coordinates X is: 0
THIS IS the Message: 0
THIS IS size of the Message: 4
THIS IS N: -1
Either the server shut down or the other player disconnected.
Game over.

Может кто-нибудь объяснить мне, что происходит и как это исправить, пожалуйста?

1 Ответ

0 голосов
/ 26 сентября 2018

здесь из консольного вывода показывает, что int, передаваемый в write_server_int (), отправляется на сервер как -1.

Нет, ваш вывод говорит, что результатиз write() есть -1:

int n = write(sockfd, &msg, sizeof(msg));
printf("\n[DEBUG] THIS IS N: %d", n);

[DEBUG] Coordinates X is: 0
THIS IS the Message: 0
THIS IS size of the Message: 4
THIS IS N: -1 <------------------------ mind the 'N'
...