Мониторинг обменных курсов валют
18c0693f

Функция vConnect()


Функция vConnect() вызывается, когда игрок щелкает по кнопке Connect. Вот как выглядит ее код:

sockaddr_in saServerAddress; int iPort = 6001,iStatus; LPHOSTENT lpHost; char szHost[128];

// Установка глобальных переменных g_bIsServer = 0; // Инициализация параметров сервера, смените указанный здесь IP-адрес // на корректный IP-адрес вашей сети sprintf(szHost, "192.168.0.2"); // Инициализация дескриптора сокета g_skClientSocket = INVALID_SOCKET; // Создание сокета g_skClientSocket = socket(AF_INET, SOCK_STREAM, 0); // Проверка наличия ошибок if(g_skClientSocket == INVALID_SOCKET) { vShowText("** ERROR ** Could Not Create Socket"); return; } vShowText("<- Socket Created ->"); // Инициализация структуры данных адреса сервера memset(&saServerAddress, 0, sizeof(sockaddr_in)); // Установка значений по умолчанию saServerAddress.sin_family = AF_INET; // Загрузка IP-адреса saServerAddress.sin_addr.s_addr = inet_addr(szHost);

// Если задано имя сервера, а IP-адрес отсутствует, // попытаемся получить требуемое значение if(saServerAddress.sin_addr.s_addr == INADDR_NONE) { vShowText("<- Looking Up Host ID ->"); // Получаем имя сервера lpHost = gethostbyname(szHost); // Проверяем, получили ли мы что-нибудь if (lpHost != NULL) { // Загружаем адрес сервера из его данных saServerAddress.sin_addr.s_addr = ((LPIN_ADDR)lpHost->h_addr)->s_addr; } else { vShowText("** ERROR ** Could Not locate host"); return; } } // Устанавливаем порт сервера saServerAddress.sin_port = htons(iPort); // Пытаемся подключиться к серверу iStatus = connect(g_skClientSocket, (struct sockaddr*)&saServerAddress, sizeof(sockaddr)); // Проверяем наличие ошибок if(iStatus == SOCKET_ERROR) { vShowText("** ERROR ** Could Not Connect To Server"); return; } // Убираем кнопки DestroyWindow(hBU_Connect); DestroyWindow(hBU_Host); vShowText("<- Connected To Server ->"); // Устанавливаем флаг подключения g_bConnected = 1; // Устанавливаем флаг, указывающий что право хода принадлежит нам g_bMyTurn = 1; // Отображаем кнопку Turn Done hBU_TurnDone = CreateWindow( "BUTTON", "Turn Done", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 5, 280, 100, 28, g_hWnd, (HMENU)IDC_hBU_TurnDone, g_hInst, NULL); vShowText(":Server waiting, make your turn");

Код подключения очень похож на тот, который я показывал вам в примере подключения к веб-серверу. Клиент сперва получает адрес сервера, а затем пытается установить соединение с ним. Как только соединение успешно установлено, клиент убирает кнопки Connect и Host и отображает новую кнопку Turn Done. В этот момент клиенту дается время, чтобы он мог сделать свой ход. Ход выполнения функции показан на рис. 14.17.


Рис. 14.17. Ход выполнения функции vConnect()





Все публикации раздела



Самый выгодный курс обмена валюты