Глобальные сети компьютеров. Практическое введение в Internet


Сторона сервера - часть 3


Обработчик этого сообщения может выглядеть, например, следующим образом:

void WndProc_OnWSAAccept(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { int rc;

// При ошибке отменяем поступление извещений // в главное окно приложения if(WSAGETSELECTERROR(lParam) != 0) { MessageBox(NULL, "accept Error", "Error", MB_OK); WSAAsyncSelect (srv_socket , hWnd, 0, 0); return; }

// Определяем размер адреса сокета acc_sin_len = sizeof(acc_sin);

// Разрешаем установку соединения srv_socket = accept (srv_socket, (LPSOCKADDR )&acc_sin, (int FAR *)&acc_sin_len);

if(srv_socket == INVALID_SOCKET) { MessageBox(NULL, "accept Error, invalid socket ", "Error", MB_OK); return; }

// Если на данном сокете начнется передача данных от // клиента, в главное окно приложения поступит // сообщение WSA_NETEVENT. // Это же сообщение поступит при разрыве соединения rc = WSAAsyncSelect (srv_socket , hWnd, WSA_NETEVENT, FD_READ | FD_CLOSE ); if(rc > 0) { closesocket (srv_socket); MessageBox(NULL, "WSAAsyncSelect Error", "Error", MB_OK); return; } }

В данном случае обработчик сообщения вначале вызывает функцию accept , выполняющую создание канала передачи данных. После этого функция WSAAsyncSelect вызывается еще один раз для того чтобы установить асинхронную обработку приема данных от удаленного клиента, а также обработку ситуации разрыва канала связи.




Начало  Назад  Вперед



Книжный магазин