博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
winSockets编程(七)WSAAsyncSelect模式
阅读量:6945 次
发布时间:2019-06-27

本文共 4084 字,大约阅读时间需要 13 分钟。

占位##

#include 
#include
#include
#pragma comment(lib, "Ws2_32")#define WM_SOCKET WM_USER+1 //定义SOCKET消息;LRESULT CALLBACK WinProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){ switch (uMsg) { case WM_SOCKET: { if(WSAGETSELECTERROR(lParam)) { shutdown(wParam, SD_BOTH); closesocket(wParam); return 0; } switch (WSAGETSELECTEVENT(lParam)) { case FD_ACCEPT: { SOCKET client = accept(wParam, NULL, NULL); WSAAsyncSelect(client, hWnd, WM_SOCKET, FD_READ | FD_WRITE | FD_CLOSE); } break; case FD_WRITE: break; case FD_READ: { CHAR szText[1024] = { 0 }; if (SOCKET_ERROR == recv(wParam, szText, 1024, 0)) { shutdown(wParam, SD_BOTH); closesocket(wParam); } else { CHAR szMsg[1100] = "接收数据:"; strcat_s(szMsg, sizeof(szMsg), szText); MessageBoxA(hWnd, szMsg, "结果", MB_OK); } } break; case FD_CLOSE: shutdown(wParam, SD_BOTH); closesocket(wParam); break; } } return 0; case WM_DESTROY: PostQuitMessage(0); return 0; default: return DefWindowProc(hWnd, uMsg, wParam, lParam); } return DefWindowProc(hWnd, uMsg, wParam, lParam);}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, PSTR pcszCommand, int iShow){ TCHAR szAppName[] = TEXT("WSAAsyncSelect"); WNDCLASSEX wndClsEx; wndClsEx.cbClsExtra = 0; wndClsEx.cbSize = sizeof(wndClsEx); wndClsEx.cbWndExtra = 0; wndClsEx.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndClsEx.hCursor = LoadCursor(NULL, IDC_ARROW); wndClsEx.hIcon = LoadIcon(NULL, IDI_APPLICATION); wndClsEx.hIconSm = NULL; wndClsEx.hInstance = hInstance; wndClsEx.lpfnWndProc = WinProc; wndClsEx.lpszClassName = szAppName; wndClsEx.lpszMenuName = NULL; wndClsEx.style = CS_HREDRAW | CS_VREDRAW; if (!RegisterClassEx(&wndClsEx)) { MessageBox(NULL, TEXT("注册窗口类失败,本程序需要在Windows NT系统上才能运行。"), TEXT("错误"), MB_OK | MB_ICONERROR); return 0; } HWND hWnd = CreateWindowEx( 0, szAppName, szAppName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); if (NULL == hWnd) { MessageBox(NULL, TEXT("创建窗口失败"), TEXT("错误"), MB_OK | MB_ICONERROR); return 0; } ShowWindow(hWnd, iShow); UpdateWindow(hWnd); WSADATA wsaData; WSAStartup(WINSOCK_VERSION, &wsaData); SOCKET sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (INVALID_SOCKET == sListen) { MessageBox(hWnd, TEXT("创建套接字失败"), TEXT("错误"), MB_OK | MB_ICONERROR); WSACleanup(); return 0; } SOCKADDR_IN sin; USHORT uPort = 4567; ZeroMemory(&sin, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_port = htons(uPort); sin.sin_addr.S_un.S_addr = INADDR_ANY; if (SOCKET_ERROR == bind(sListen, (PSOCKADDR)&sin, sizeof(sin))) { MessageBox(hWnd, TEXT("绑定套接字失败"), TEXT("错误"), MB_OK | MB_ICONERROR); shutdown(sListen, SD_RECEIVE); closesocket(sListen); WSACleanup(); return 0; } //将套接字设为窗口通知消息类型 WSAAsyncSelect(sListen, hWnd, WM_SOCKET, FD_ACCEPT | FD_CLOSE); listen(sListen, 5); MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } WSACleanup(); return msg.wParam;}

 

转载于:https://www.cnblogs.com/tinaluo/p/7699122.html

你可能感兴趣的文章
php之道
查看>>
Jquery实现Bootstrap树形列表
查看>>
linux下安装nginx
查看>>
钉钉js依赖库学习
查看>>
转载mysql数据库配置优化
查看>>
Perl图书的一些体会
查看>>
阿里Java开发规范&谷歌Java开发规范&华为Java开发规范&Tab键和空格比较&Eclipse的Tab键设置 总结...
查看>>
android电话状态的监听
查看>>
Linq中string转int的方法
查看>>
循环-12. 打印九九口诀表(15)
查看>>
html5--4-4 audio元素/格式的转换
查看>>
『TensorFlow』读书笔记_进阶卷积神经网络_分类cifar10_上
查看>>
SecureCRT发送键盘按键对应表(转义字符)
查看>>
SQL Server DBA SQL
查看>>
事务 ~ 锁(转)
查看>>
CentOS7脱机安装SQL Server 2017
查看>>
RK3399参考设计方案之DC-DC电源芯片RK808D【转】
查看>>
加密货币 (Cryptocurrency) 市值 (market capitalization) 列表
查看>>
julia应用于自动驾驶汽车、机器人、3D 打印、精准医疗、增强现实、基因组学、能源交易、机器学习、金融风控和太空任务设计等多个领域...
查看>>
Go Web:数据存储(3)——gob对象序列化
查看>>