//网络IO的几种模型网址:http://hi.baidu.com/xun1573/blog/item/257af3ef2b66b4ffcf1b3e78.html
//select模型
// #include <winsock.h>
// #include <stdio.h>
//
// #define PORT 5150
// #define MSGSIZE 1024
//
// #pragma comment(lib, "ws2_32.lib")
//
// int g_iTotalConn = 0;
// SOCKET g_CliSocketArr[FD_SETSIZE];
//
// DWORD WINAPI WorkerThread(LPVOID lpParameter);
//
// int main()
// {
// WSADATA wsaData;
// SOCKET sListen, sClient;
// SOCKADDR_IN local, client;
// int iaddrSize = sizeof(SOCKADDR_IN);
// DWORD dwThreadId;
//
// // Initialize Windows socket library
// WSAStartup(0x0202, &wsaData);
//
// // Create listening socket
// sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
//
// // Bind
// local.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
// local.sin_family = AF_INET;
// local.sin_port = htons(PORT);
// bind(sListen, (struct sockaddr *)&local, sizeof(SOCKADDR_IN));
//
// // Listen
// listen(sListen, 3);
//
// // Create worker thread
// CreateThread(NULL, 0, WorkerThread, NULL, 0, &dwThreadId);
//
// while (TRUE)
// {
// // Accept a connection
// sClient = accept(sListen, (struct sockaddr *)&client, &iaddrSize);
// printf("Accepted client:%s:%d\n", inet_ntoa(client.sin_addr), ntohs(client.sin_port));
//
// // Add socket to g_CliSocketArr
// g_CliSocketArr[g_iTotalConn++] = sClient;
// }
//
// return 0;
// }
//
// DWORD WINAPI WorkerThread(LPVOID lpParam)
// {
// int i;
// fd_set fdread;
// int ret;
// struct timeval tv = {1, 0};
// char szMessage[MSGSIZE];
//
// while (TRUE)
// {
// FD_ZERO(&fdread);
// for (i = 0; i < g_iTotalConn; i++)
// {
// FD_SET(g_CliSocketArr[i], &fdread);
// }
//
// // We only care read event
// ret = select(0, &fdread, NULL, NULL, &tv);
//
// if (ret == 0)
// {
// // Time expired
// continue;
// }
//
// for (i = 0; i < g_iTotalConn; i++)
// {
// if (FD_ISSET(g_CliSocketArr[i], &fdread))
// {
// // A read event happened on g_CliSocketArr[i]
// ret = recv(g_CliSocketArr[i], szMessage, MSGSIZE, 0);
// if (ret == 0 || (ret == SOCKET_ERROR && WSAGetLastError() == WSAECONNRESET))
// {
// // Client socket closed
// printf("Client socket %d closed.\n", g_CliSocketArr[i]);
// closesocket(g_CliSocketArr[i]);
// if (i < g_iTotalConn - 1)
// {
// g_CliSocketArr[i--] = g_CliSocketArr[--g_iTotalConn];
// }
// }
// else
// {
// // We received a message from client
// szMessage[ret] = '\0';
// send(g_CliSocketArr[i], szMessage, strlen(szMessage), 0);
// }
// }
// }
// }
//
// return 0;
// }
////WSAAsyncSelect模型
// #include <winsock.h>
// #include <tchar.h>
//
// #define PORT 5150
// #define MSGSIZE 1024
// #define WM_SOCKET WM_USER+0
//
// #pragma comment(lib, "ws2_32.lib")
//
// LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
//
// int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
// {
// static TCHAR szAppName[] = _T("AsyncSelect Model");
// HWND hwnd ;
// MSG msg ;
// WNDCLASS wndclass ;
//
// wndclass.style = CS_HREDRAW | CS_VREDRAW ;
// wndclass.lpfnWndProc = WndProc ;
// wndclass.cbClsExtra = 0 ;
// wndclass.cbWndExtra = 0 ;
// wndclass.hInstance = hInstance ;
// wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
// wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
// wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
// wndclass.lpszMenuName = NULL ;
// wndclass.lpszClassName = szAppName ;
//
// if (!RegisterClass(&wndclass))
// {
// MessageBox (NULL, TEXT ("This program requires Windows NT!"), szAppName, MB_ICONERROR) ;
// return 0 ;
// }
//
// hwnd = CreateWindow (szAppName, // window class name
// TEXT ("AsyncSelect Model"), // window caption
// WS_OVERLAPPEDWINDOW, // window style
// CW_USEDEFAULT, // initial x position
// CW_USEDEFAULT, // initial y position
// CW_USEDEFAULT, // initial x size
// CW_USEDEFAULT, // initial y size
// NULL, // parent window handle
// NULL, // window menu handle
// hInstance, // program instance handle
// NULL) ; // creation parameters
//
// ShowWindow(hwnd, iCmdShow);
// UpdateWindow(hwnd);
//
// while (GetMessage(&msg, NULL, 0, 0))
// {
// TranslateMessage(&msg) ;
// DispatchMessage(&msg) ;
// }
//
// return msg.wParam;
// }
//
// LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
// {
// WSADATA wsd;
// static SOCKET sListen;
// SOCKET sClient;
// SOCKADDR_IN local, client;
// int ret, iAddrSize = sizeof(client);
// char szMessage[MSGSIZE];
//
// switch (message)
// {
// case WM_CREATE:
// // Initialize Windows Socket library
// WSAStartup(0x0202, &wsd);
//
// // Create listening socket
// sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
//
// // Bind
// local.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
// local.sin_family = AF_INET;
// local.sin_port = htons(PORT);
// bind(sListen, (struct sockaddr *)&local, sizeof(local));
//
// // Listen
// listen(sListen, 3);
//
// // Associate listening socket with FD_ACCEPT event
// WSAAsyncSelect(sListen, hwnd, WM_SOCKET, FD_ACCEPT);
// return 0;
//
// case WM_DESTROY:
// closesocket(sListen);
// WSACleanup();
// PostQuitMessage(0);
// return 0;
//
// case WM_SOCKET:
// if (WSAGETSELECTERROR(lParam))
// {
// closesocket(wParam);
// break;
// }
//
// switch (WSAGETSELECTEVENT(lParam))
// {
// case FD_ACCEPT:
// // Accept a connection from client
// sClient = accept(wParam, (struct sockaddr *)&client, &iAddrSize);
//
// // Associate client socket with FD_READ and FD_CLOSE event
// WSAAsyncSelect(sClient, hwnd, WM_SOCKET, FD_READ | FD_CLOSE);
// break;
//
// case FD_READ:
// ret = recv(wParam, szMessage, MSGSIZE, 0);
//
// if (ret == 0 || ret == SOCKET_ERROR && WSAGetLastError() == WSAECONNRESET)
// {
// closesocket(wParam);
// }
// else
// {
// szMessage[ret] = '\0';
// send(wParam, szMessage, strlen(szMessage), 0);
// }
// break;
//
// case FD_CLOSE:
// closesocket(wParam);
// break;
// }
// return 0;
// }
//
// return DefWindowProc(hwnd, message, wParam, lParam);
// }
////事件select模型。WSAEventSelect
// #include <winsock2.h>
// #include <stdio.h>
//
// #define PORT 5150
// #define MSGSIZE 1024
//
// #pragma comment(lib, "ws2_32.lib")
//
// int g_iTotalConn = 0;
// SOCKET g_CliSocketArr[MAXIMUM_WAIT_OBJECTS];
// WSAEVENT g_CliEventArr[MAXIMUM_WAIT_OBJECTS];
//
// DWORD WINAPI WorkerThread(LPVOID);
// void Cleanup(int index);
//
// void main()
// {
// WSADATA wsaData;
// SOCKET sListen, sClient;
// SOCKADDR_IN local, client;
// DWORD dwThreadId;
// int iaddrSize = sizeof(SOCKADDR_IN);
//
// // Initialize Windows Socket library
// WSAStartup(0x0202, &wsaData);
//
// // Create listening socket
// sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
//
// // Bind
// local.sin_
hanyj_3000
- 粉丝: 8
- 资源: 17
最新资源
- 9.30 SWKJ 男头7张+女头2张.zip
- 1734967319584.png
- TG-2024-12-23-194506126.mp4
- 计算机导论之软件工程-公司员工内部培训
- 网络唤醒++安装包,可以直接安装到所有openwrt设备
- Example10_1.java
- MATLAB空数组(empty array)的深刻理解与运用
- 群接龙脚本autojs总结and精美ui.zip
- jhaghjgfhgsdhghsdh
- 2023-04-06-项目笔记 - 第三百五十七阶段 - 4.4.2.355全局变量的作用域-355 -2025.12.24
- 通过apache+aliyuncli管理阿里云子用户
- 快递公司送货策略.doc
- 2023-04-06-项目笔记 - 第三百五十七阶段 - 4.4.2.355全局变量的作用域-355 -2025.12.24
- ISO15118-1-2013 Road vehicles - Vehicle to grid communication interface General information
- Android+课程设计不是梦+音乐播放器
- 期末上机考试第三题.py
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈