TCP-сервер не ждет ответа клиента, как это исправить? - PullRequest
0 голосов
/ 08 мая 2018

Первая итерация работает безупречно, как я могу заставить ее работать до конца цикла? Я пытался отследить проблему, первоначально в этом цикле for сервер по какой-то причине не ожидал ответа клиента, поэтому я подумал, что это может быть из-за того, что send() и recv() находятся в функции void , Итак, я попытался добавить еще одну пару send() и recv(), которая должна ждать ответа клиента, но это не сработает.

Я заметил, что во время самой первой итерации она прекрасно работает, переходя к следующей, она уже разрушена. Я думаю, что он пытается использовать предыдущий message, поэтому я изменил его на пустой массив, который не работал, потому что он все еще использует его.

Это цикл for:

for (int i = 0; i < std::atoi(max_round); i++)
{
    bet(client1, message, to_client, size);
    feldolgoz(message, game_obj, client1);
    bet(client2, message, to_client, size);
    feldolgoz(message, game_obj, client2);
    game_obj.RoundResult();
    char next_round[size] = "Irjon valamit kovetkezo korbe lepesert!";
    char answer[size];
    send(client1, next_round, sizeof(next_round), 0);
    if (recv(client1, &answer, size, 0) < 0)
    {
        Receive_Error obj;
        throw obj;
    }
    send(client2, next_round, sizeof(next_round), 0);
    if (recv(client2, &answer, size, 0) < 0)
    {
        Receive_Error obj;
        throw obj;
    }
    bzero(answer, sizeof(answer));
}

это bet функция:

void bet(int client, char *message, char *to_client, const int size)
{
    int stuff = send(client, to_client, sizeof(to_client), 0);
    if (stuff < 0)
    {
        Send_Error obj;
        throw obj;
    }
    if (recv(client, message, sizeof(message), 0) < 0)
    {
        Receive_Error obj;
        throw obj;
    }

и это функция feldolgoz (которая в основном обрабатывает информацию):

void feldolgoz(char *message, Roulette &obj, int client)
{
    char *temp;
    char *word;
    char color = 0;
    int count = 0;
    int money = 0;
    int number = -1;
    temp = strtok(message, " ");
    while (temp != NULL)
    {
        word = temp;
        switch (count)
        {
        case 0:
            color = word[0];
            break;
        case 1:
            number = (int)word[0];
            break;
        case 2:
            color = std::atoi(word);
            break;
        }
        count++;
        temp = strtok(NULL, " ");
    }
    obj.getBet(color, number, money, client);
    bzero(message, sizeof(message));
}

Функция obj.getBet() в основном отправляет клиенту сообщение о том, выиграл он или проиграл раунд, , но Я очень сомневаюсь, что это виновник. Интересно то, что первая итерация работает безупречно, как я могу заставить его работать до конца цикла?

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