占位##
#include <WinSock2.h> #include <Windows.h> #include <StrSafe.h> #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; }
————————————————
版权声明:本文为博客园博主「天涯」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· Vite CVE-2025-30208 安全漏洞
· 《HelloGitHub》第 108 期
· MQ 如何保证数据一致性?
· 一个基于 .NET 开源免费的异地组网和内网穿透工具