Сетевые технологии. Учебное пособие. Баканов В.М. - 59 стр.

UptoLike

Составители: 

59
В случае использования параметров
FD_READ, FD_WRITE, FD_OOB
или
FD_ACCEPT
может возникнуть ошибка с кодом
WSAENETDOWN
.
Обработчик сообщения
WSA_NETEVENT
должен выполнить анализ причи-
ны, по которой он был вызван, так как за один вызов функции
WSAAsyncSelect
можно задать несколько событий, вызывающих генерацию
этого сообщения. Такой анализ проводится, например, следующим образом
(параметр
wParam
содержит дескриптор сокета, на котором выполняется пе-
редача данных, а
lParam
- код происшедшего в сети события)
void
WndProc_OnWSANetEvent(HWND hWnd,
UINT msg,
WPARAM wParam,
LPARAM lParam)
{
char szTemp[256];
int rc;
// если на сокете выполняется передача данных, то
// принять и отобразить эти данные в виде строки текста
if (WSAGETSELECTEVENT(lParam) == FD_READ)
{
rc = recv((SOCKET) wParam, szTemp, 256, 0);
if (rc)
{
szTemp[rc] = '\0';
MessageBox(NULL, szTemp, "Принятые данные", MB_OK);
}
return;
}
// если соединение завершено, вывести сообщение об этом
else
if (WSAGETSELECTEVENT(lParam) == FD_CLOSE)
{
MessageBox(NULL, "Соединение завершено", "Server", MB_OK);
}
} // конец функции WndProc_OnWSANetEvent
В некоторых случаях целесообразно использовать протокол негарантиро-
ванной
доставки UDP (User Datagram Protocol), так как он, например, допус-
кает одновременную рассылку пакетов сем узлам сети (режим broadcast).
При этом не требуется создавать канал данных, поэтому процедура инициа-