网络服务器编程——异步选择模型

本文介绍了如何在Windows环境下,使用WSAAsyncSelect实现TCP服务器的异步选择模型。通过创建窗口并设置回调函数,实现了非阻塞的网络事件处理。当网络事件发生时,系统会向指定窗口发送消息,以此实现服务器的异步通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

4.3.2异步选择模型

异步选择WSAAsyncSelect是Select模型的异步版本。在Select模型中,调用select()函数会发生阻塞;而WSAAsyncSelect模型在调用WSAAsyncSelect()函数时,它会通知系统感兴趣的网络事件,然后立即返回。

在前面,我们在windows下创建的都是控制台程序;本小节的代码则是windows应用程序。使用WSAAsyncSelect模型,必须在应用程序中创建一个窗口,并为窗口提供回调函数(窗口处理函数)。

//异步选择TCP服务器端代码

#include <iostream>

#include <winsock.h>

#include <tchar.h>

using namespace std;

 

#pragma comment(lib, "ws2_32.lib")

#define WM_SOCKET WM_USER+1

 

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

 

//windows应用程序的入口函数:WinMain,其参数必须和声明保持一致;返回0表示正常退出

//参数1:当前实例的句柄;参数2:前一个实例的句柄;参数3:命令行参数;参数4:窗体显示形式(最大化、最小化)

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)

{

static TCHAR szAppName[] = _T("AsyncSelect Model");

//步骤1:窗口类定义

WNDCLASS     wndclass;//WNDCLASS结构体用来存储窗口信息

wndclass.style = CS_HREDRAW | CS_VREDRAW;//窗口的样式

wndclass.lpfnWndProc = WndProc;//定义窗口处理函数

wndclass.cbClsExtra = 0;

wndclass.cbWndExtra = 0;

wndclass.hInstance = hInstance;//当前实例句柄,由windows自动分发

wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);//窗口的最小化图标

wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);  // 窗口光标:采用箭头

wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //窗口背景:白色

wndclass.lpszMenuName = NULL; //窗口无菜单

wndclass.lpszClassName = szAppName; //窗口类名

//步骤2:注册窗口

if (!RegisterClass(&wndclass))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值