社区
包东华的课程社区_NO_1
windows网络编程之tcp/ip
帖子详情
基于完成例程的重叠IO
woaibcheng
2025-02-27 16:21:12
课时名称
课时知识点
基于完成例程的重叠IO
基于完成例程的重叠IO,windows网络编程,UDP/IP协议编程
...全文
288
回复
打赏
收藏
基于完成例程的重叠IO
课时名称课时知识点基于完成例程的重叠IO基于完成例程的重叠IO,windows网络编程,UDP/IP协议编程
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
基于
完成
例程
的
重叠
IO
模型
初步封装的基于
完成
例程
的
重叠
IO
模型,附有注释,希望对学习网络模型的同学有所帮助,共同进步
重叠
IO
完成
例程
代码
测试用测试用测试用测试用测试用测试用测试用测试用测试用测试用测试用测试用测试用
重叠
IO
模型之OverLapped
完成
例程
模型WSAComplet
io
nRoutineServer VS2010
重叠
IO
模型之OverLapped
完成
例程
模型WSAComplet
io
nRoutineServer VS2010 基础入门 客户端与服务器端 客户端向服务器端发送数据 可接收多个客户端 #include #include #pragma comment (lib, "ws2_32.lib") #define PORT 8088 #define MSG_SIZE 1024 SOCKET g_sConnect; bool g_bConnect = false; typedef struct { WSAOVERLAPPED overLap; WSABUF wsaBuf; char chMsg[MSG_SIZE]; DWORD nRecvNum; DWORD nFlags; SOCKET sClient; }PRE_
IO
_OPERAT
IO
N_DATA, *LP_PER_
IO
_OPERAT
IO
N_DATA; void CALLBACK Complet
io
nRoutine(DWORD dwError, DWORD dwTrans, LPWSAOVERLAPPED lpOverlap, DWORD nFlags); DWORD WINAPI workThread(LPVOID lp) { LP_PER_
IO
_OPERAT
IO
N_DATA lpData; while(TRUE) { if (g_bConnect) // 有新的连接 { // 为lpData分配空间并初始化 lpData = (LP_PER_
IO
_OPERAT
IO
N_DATA)HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(PRE_
IO
_OPERAT
IO
N_DATA)); lpData->wsaBuf.len = MSG_SIZE; lpData->wsaBuf.buf = lpData->chMsg; lpData->sClient = g_sConnect; WSARecv(lpData->sClient, &lpData->wsaBuf, 1, &lpData->nRecvNum, &lpData->nFlags, &lpData->overLap, Complet
io
nRoutine); g_bConnect = false; // 处理完毕 } SleepEx(1000, TRUE); } return 0; } // 系统在WSARecv收到信息后,自动调用此函数,并传入参数--回调函数 void CALLBACK Complet
io
nRoutine(DWORD dwError, DWORD dwTrans, LPWSAOVERLAPPED lpOverlap, DWORD nFlags) { LP_PER_
IO
_OPERAT
IO
N_DATA lpData = (LP_PER_
IO
_OPERAT
IO
N_DATA)lpOverlap; if (0 != dwError) // 接收失败 { printf("Socket %d Close!\n", lpData->sClient); closesocket(lpData->sClient); HeapFree(GetProcessHeap(), 0, lpData); } else // 接收成功 { lpData->chMsg[dwTrans] = '\0'; send(lpData->sClient, lpData->chMsg, dwTrans, 0); printf("Socket:%d MSG: %s \n", lpData->sClient, lpData->chMsg); memset(&lpData->overLap, 0, sizeof(WSAOVERLAPPED)); lpData->wsaBuf.len = MSG_SIZE; lpData->wsaBuf.buf = lpData->chMsg; // 继续接收来自客户端的数据 实现 WSARecv与Complet
io
nRoutine循环 WSARecv(lpData->sClient, &lpData->wsaBuf,1, &lpData->nRecvNum, &lpData->nFlags, &lpData->overLap, Complet
io
nRoutine); } } int main() { WSADATA wsaData; WSAStartup(0x0202, &wsaData); SOCKET sListen; sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); sockaddr_in addrListen; addrListen.sin_family = AF_INET; addrListen.sin_port = htons(PORT); addrListen.sin_addr.S_un.S_addr = htonl(ADDR_ANY); int nErrorCode = 0; nErrorCode = bind(sListen, (sockaddr*)&addrListen, sizeof(sockaddr)); nErrorCode = listen(sListen, 5); DWORD nThreadID; CreateThread(NULL, 0, workThread, NULL, 0, &nThreadID); sockaddr_in addrConnect; int nAddrLen = sizeof(sockaddr_in); printf("Server Started!\n"); while(TRUE) { g_sConnect= accept(sListen, (sockaddr*)&addrConnect, &nAddrLen); if (INVALID_SOCKET == g_sConnect) { return -1; } g_bConnect = true; // 连接成功 printf("Accept Client :%s -- PORT:%d\n", inet_ntoa(addrConnect.sin_addr), htons(addrConnect.sin_port)); } return 0; }
socket工程文件
重叠
IO
完成
例程
socket通信的客户端和服务器端的工程文件,基于
重叠
IO
完成
例程
技术,实现了多个客户端向服务器端持续发送数据
c++异步
重叠
完成
例程
io
封装
c++
重叠
io
封装,用异步
重叠
完成
例程
.主要是封装思想.具体沾包还要靠自己解决.
包东华的课程社区_NO_1
5
社区成员
1,144
社区内容
发帖
与我相关
我的任务
包东华的课程社区_NO_1
C/C++课程讲解
复制链接
扫一扫
分享
社区描述
C/C++课程讲解
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章