最简单的WSAEventSelect模型(注意注释的地方)
发布日期:2021-07-14 20:03:25
浏览次数:1
分类:技术文章
本文共 1988 字,大约阅读时间需要 6 分钟。
// Win32SocketTest.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "winsock2.h"//#pragma comment(lib,"wsock32.lib")#pragma comment(lib,"Ws2_32.lib")#includeint _tmain(int argc, _TCHAR* argv[]){ int arg = 1000; int theOp = ~arg + 1; int theOp2 = ~theOp + 1; //启动socket WSADATA data; WSAStartup(MAKEWORD(2,2),&data); //设置服务器地址 SOCKADDR_IN addr; addr.sin_family = AF_INET; addr.sin_port = htons(5000); addr.sin_addr.S_un.S_un_b.s_b1 = 113; addr.sin_addr.S_un.S_un_b.s_b2 = 90; addr.sin_addr.S_un.S_un_b.s_b3 = 50; addr.sin_addr.S_un.S_un_b.s_b4 = 170; int len = sizeof(addr); //创建socket SOCKET s = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); //绑定socket bind(s,(sockaddr*)&addr,sizeof(addr)); while(true) { //监听socket listen(s,SOMAXCONN); //创建与socket关联的事件 WSAEVENT event = WSACreateEvent(); WSAEventSelect(s,event,FD_ACCEPT | FD_CLOSE); //等待事件发生 // //阻塞!必须建立线程去处理。。以后改进。 DWORD nResult = WaitForSingleObject(event, INFINITE); if (nResult == WAIT_OBJECT_0) { //查询是什么事件发生了。 WSANETWORKEVENTS ne; WSAEnumNetworkEvents(s,event,&ne); if (ne.lNetworkEvents&FD_ACCEPT) { //为这个客户端建立一个套接字用来收发数据。 SOCKADDR_IN clientAddr; int addrlen = sizeof(clientAddr); SOCKET sClient = accept(s, (sockaddr*)&clientAddr, &addrlen); // /阻塞!必须建立线程去处理。。以后改进。 WSAEVENT eventWriteRead = WSACreateEvent(); WSAEventSelect(sClient,eventWriteRead,FD_WRITE|FD_READ|FD_CLOSE); while (true) { WaitForSingleObject(eventWriteRead,INFINITE); { //查询是什么事件发生了。 WSANETWORKEVENTS ne; WSAEnumNetworkEvents(sClient,eventWriteRead,&ne); if (ne.lNetworkEvents&FD_WRITE) { char a[1000]; memset(a,0,sizeof(a)); std::cin>>a; send(sClient, a, sizeof(a),0); } else if (ne.lNetworkEvents&FD_READ) { char buf[1000]; buf[999] = 0; recv( sClient,buf,len,0); std::cout<
要改进的地方
1。阻塞的地方waiforsingle改为waitformultiple,并且用线程去处理。
2。用短连接代替长连接来处理。收到一个完整的业务包之后,进行关闭。
转载地址:https://blog.csdn.net/daojin505/article/details/76812159 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.240.166.169]2024年03月28日 14时08分43秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
时间如漏斗
2019-04-26
自学编程,我该如何寻找自学资源?(含视频)
2019-04-26
android su程序分析
2019-04-26
android Superuser.apk源码分析
2019-04-26
Android从触碰屏幕开始的事件采集,解析及分发(1)
2019-04-26
福利来袭,免费获取 Android 开发资料以及直播课程
2019-04-26
优势丧失
2019-04-26
【上市啦】“Python 之父” 力荐的蓝皮书,你知道是哪本吗?
2019-04-26
Python 爬虫面试题 170 道:2019 版
2019-04-26
歪门邪道
2019-04-26
我的前六年程序生涯
2019-04-26
知识地图
2019-04-26
罗马总会建成
2019-04-26
程序通过技术赚钱的八个途径
2019-04-26
我在爬坡阶段
2019-04-26
大疆机甲大师教育机器人Python开发:中文命名变量初尝试
2019-04-26
大疆机甲大师教育机器人Python开发:API中文化初尝试
2019-04-26
大疆机甲大师Python开发: 两只老虎
2019-04-26
大疆机甲大师教育机器人Python API中文化之一:枪亮枪暗
2019-04-26
大疆机甲大师教育机器人Python API中文化之二:LED闪烁
2019-04-26