Моя задача - реализовать игру для двух игроков между двумя компьютерами, подключенными через TCP. Одно из требований состоит в том, что только победителю предоставляется выбор снова играть или нет. В случае, если сервер выигрывает и решает не играть дальше, клиент должен перезапуститься как сервер и принять новые соединения.
Мой подход: Если игра ПРОИГРЫВАЕТСЯ (в клиентском режиме), закройте sockfd и создайте еще одну. Затем используйте setsockopt, чтобы разрешить повторную привязку с использованием SO_REUSEADDR, а затем вызовите bind.
int yes = 1;
if ( setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1 )
{
perror("setsockopt");
}
if ( bind(sockfd, (struct sockaddr*)&svr, sizeof(svr) ) == -1 )
{
perror("server: bind");
}
Но я все равно получаю ту же ошибку «Адрес уже используется». Я пробовал спать на 150 секунд, прежде чем воссоздать сокет, и этот метод работает.
ПРИМЕЧАНИЕ. Я тестирую это на том же ПК. Он может работать на двух связанных компьютерах, но необходимо, чтобы он работал на одном компьютере. Пожалуйста помоги.