Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > Сетевая игра MFC-Winsock


Автор: variag 19.8.2009, 21:22
Здравствуйте!
Меня зовут Владимир. Мне нужно написать сетевое приложение - игру "Камень-ножницы-бумага" в Visual Studio 6.0 с использованием библиотек Winsock и MFC (класс CSocket применять нельзя). Есть сервер, есть два клиента (если два клиента уже подключились к серверу, то третьему, совершающему подключение, должно быть отказано в этом без блокирования интерфейса).
Каждый клиент отправляет серверу слово: или "камень", или "ножницы", или "бумага". Сервер должен принять эти данные, решить, кто выиграл, и отправить строки типа "Вы выиграли" и "Вы проиграли" соответственно клиенту-победителю и клиенту-проигравшему.
У меня есть работающие заготовки клиента и сервера. Они прикреплены ниже. Чтобы запустить программы, их надо скомпилировать (в папках проектов нет папки Debug).
Очень прошу помочь.

С уважением,
Владимир.

Автор: andrew_121 20.8.2009, 01:32
а в чем вопрос собственно? smile 

Автор: variag 20.8.2009, 15:23
Вопрос вот в чем: как организовать программу? Я думаю так.
Сервер загружает библиотеку Winsock, создает сокет для прослушивания, привязывает его к локальному интерфейсу, переводит этот сокет в режим прослушивания (второй параметр у функции listen равен 2, так как надо, чтобы подключалось только два клиента), затем принимает подключения клиентов и обслуживает каждого из двух клиентов в отдельном потоке.
Что значит обслуживает: сначала принимает строку от каждого клиента: "камень", "ножницы" или "бумага", потом вызывает функцию для определения победителя и проигравшего (ее я, в принципе, сделал), затем отправляет строки-результаты клиентам.
Что касается клиентов, то, я полагаю, что код имеющегося клиента менять не надо, так как он делает то, что должен: сначала отправляет данные серверу, а потом получает строку от сервера. Основная работа должна быть над сервером.
Забыл сказать: заготовки, что у меня есть - это эхо-серверное приложение. То есть, мне надо переделать эхо-сервер в сервер, обслуживающий двух клиентов и обрабатывающий данные, полученные от них.
Я пробовал писать, но работающего приложения у меня не получилось.

Автор: J0ker 21.8.2009, 01:03
Цитата(variag @  20.8.2009,  15:23 Найти цитируемый пост)
второй параметр у функции listen равен 2, так как надо, чтобы подключалось только два клиента

этот параметр предназначен не для этого

Автор: variag 21.8.2009, 18:55
Цитата(J0ker @ 21.8.2009,  01:03)
Цитата(variag @  20.8.2009,  15:23 Найти цитируемый пост)
второй параметр у функции listen равен 2, так как надо, чтобы подключалось только два клиента

этот параметр предназначен не для этого

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

Может быть, можно так:
Принять сначала двух клиентов, а когда принимаем третьего, то после принятия отправить ему строку типа "Вы лишний" и разорвать с ним соединение через функцию closesocket(SOCKET)?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)