Первая итерация работает безупречно, как я могу заставить ее работать до конца цикла? Я пытался отследить проблему, первоначально в этом цикле 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()
в основном отправляет клиенту сообщение о том, выиграл он или проиграл раунд, , но Я очень сомневаюсь, что это виновник. Интересно то, что первая итерация работает безупречно, как я могу заставить его работать до конца цикла?