单线程实现同时监听多个端口(windows平台c++代码)

前言  多年前开发了一套网络库,底层实现采用IOCP(完成端口)。该库已在公司多个程序中应用;经过多次修改,长时间检验,已经非常稳定高效。最近把以前的代码梳理了一下,又加进了一些新的思路。代码结构更加合理,性能也有所提升。打算将该库一些的知识点写出来,以供参考。服务端要在多个端口监听,这种场合并不多见。但作为一个完善的网络库,似乎有必要支持此功能的。传统实现方法  如果监听端口个数很少,也可以采用传统的方法。因为accept函数是阻塞的,所以要实现在n个端口监听,就需要n个线程。如果监听端口个数不多,这也不是多大问题。如果监听端口多达几十个,这种方法就有些不妥。线程也是一种资源,线程过多占用资源会增加;也会导致系统负担加重。更可行的实现方法  实现方法有些曲折,需要一步一步分析;基本的原理就是将socket句柄与事件(event)相关联。Windows有相关的函数可以对多个事件监听,当某个事件被触发,就知道相应的socket有事件到达。可以对该socket做accept,因为已经确定该socket有事件了,所以accept函数会立即返回。这样就达到对多个端口同时监听的目的。1)生成so...

windows版mysql8.0安装详解

2018年07月04日13:37:40 Zn昕 阅读数6433更多分类专栏: mysql 版权声明:本文为博主原创文章,遵循 CC4.0by-sa 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/ycxzuoxin/article/details/80908447      准备去下载一个本地mysql服务器时,突然发现mysql从5.7瞬间升级为8.0了,那还等什么,直接下载下来玩玩先.下载地址:https://dev.mysql.com/downloads/mysql/       下载完成后将其解压到自定义目录下,我所有的工具都保存在D:ools,解压完成后会看见以下目录:随后,配置环境变量(我的电脑点右键,然后点属性,然后点击环境变量),步骤如下:此时,环境变量配置完成,接下来进行安装mysql的操作.首先可以看见安装目录下没有my.ini文件...

windows版mysql安装

https://blog.csdn.net/ycxzuoxin/article/details/80908447...
代码星球 代码星球·2020-12-10

windows中git输错密码后不能重新输入的问题

当输入密码错误后,git会把密码保存在windows的你的当前用户名的缓存中。我们可以在控制面板中寻找到这个缓存,再删掉就可以了。首先,打开“控制面板”,把“查看方式”改为“大图标”,再打开“用户账户”   会打开“用户账户”页面,  如果你的git里保存有用户名和密码,在下图里就会有保存,然后删掉就可以重新输入了。  ...

windows清空电脑的DNS缓存

清空电脑的DNS缓存按"Win+R"系统热键打开"运行"窗口,进入terminal终端输入"ipconfig/flushdns"命令后按回车,就可以清空电脑的DNS缓存。...

windows中dos命令指南

CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本、文件系统版本)chcp修改默认字符集chcp936默认中文chcp650011.appwiz.cpl:程序和功能2.calc:启动计算器5.chkdsk.exe:Chkdsk磁盘检查(管理员身份运行命令提示符)6.cleanmgr:打开磁盘清理工具9.cmd.exe:CMD命令提示符10.自动关机命令 Shutdown-s-t600:表示600秒后自动关机 shutdown-a:可取消定时关机 Shutdown-r-t600:表示600秒后自动重启12.CompMgmtLauncher:计算机管理13.compmgmt.msc:计算机管理14.credwiz:备份或还原储存的用户名和密码16.control:控制面版17.dcomcnfg:打开系统组件服务19.devmgmt.msc:设备管理器20.desk.cpl:屏幕分辨率21.dfrgui:优化驱动器Windows7→dfrg.msc:磁盘碎片整理程序22.dialer:电话拨号程序23.diskmgmt.msc:磁盘管理24.dvd...
代码星球 代码星球·2020-11-27

如何解决Windows 10系统下设备的声音问题

如何解决Windows10系统下设备的声音问题? 请阅读下面的说明来解决Windows10设备上的声音问题。1.检查设备管理器打开开始菜单,键入设备管理器,从出现的结果中选择并打开它.在声音、视频和游戏控制器栏目下,选择并打开你的声卡.选择驱动程序一栏,并选择更新驱动程序.如果系统没有找到新的驱动,可以尝试在ASUS官网寻找驱动。 如果上述步骤无效,尝试重装声卡驱动: 打开 设备管理器,右击声卡驱动,选择 卸载.重启电脑,系统就会自动尝试重装声卡驱动.如果无效,尝试按照下列步骤使用Windows系统提供的声卡驱动: 在设备管理器中,右击声卡驱动 >更新驱动程序软件>浏览计算机以查找驱动程序软件 >从计算机的设备驱动程序列表中选择,选择HighDefinitionAudioDevice,选择下一步,按照提示安装即可. 2.检查线路,音量检查一下耳机和扬声器,是否连接线松了或者接入了错误接口.检查一下电量和音量水平,试着将所有音量调至最大.有些扬声器和应用有自己的音量控制设置,也需要...

安全模式下运行Windows installer并卸载程序

【安全模式】打开命令行执行REGADD"HKLMSYSTEMCurrentControlSetControlSafeBootMinimalMSIServer"/VE/TREG_SZ/F/D"Service"(各个选项如/ve/t/f/d等一般小写) 创建安装服务并启动netstartmsiserver  打开添加/删除程序卸载 【带网络连接的安全模式】REGADD"HKLMSYSTEMCurrentControlSetControlSafeBootNetworkMSIServer"/VE/TREG_SZ/F/D"Service"...

Windows系统防火墙用法

1、按下“Win+X”组合键呼出系统快捷菜单,点击打开“控制面板”;2、将“查看方式”修改为【大图标】,然后点击“Windows防火墙”;3、在防火墙窗口左侧点击“高级设置”;(若防火墙未开启,我们需要先点击右侧的更改防火墙设置后面的“使用推荐设置”)4、选择入站规则,新建规则,选择程序;5、在“新建入站规则向导”界面选择程序路径,选择“阻止链接”即可。...

windows环境设置mysql自动备份(测试成功)

要实现数据库的自动备份就需要一下两步: 利用MySQL提供的备份命令mysqldump结合Windows的任务计划程序实现步骤编写脚本说明:该脚本不会关闭数据库,并且可以按每一天的时间来命名备份文件。新建一个数据库备份文件的存放目录,如:C:mysql_backup注意:目录地址中不要带空格!新建一个批处理文件,如:mysql_backup_tool.bat,文件内容如下:rem******MySQLbackupstart******@echooff::删除一周前的备份数据forfiles/p"c:mysql_backup"/mbackup_*.sql-d-7/c"cmd/cdel/f@path"::设置时间变量set"Ymd=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%"::进入mysql安装目录的bin目录下cdC:ProgramFilesMySQLMySQLServer5.7in::执行备份操作mysqldump--opt--single-transaction=TRUE--use...

阿里云云服务器Windows Server 2012 R2无法安装IIS等组件的解决办法

WindowsServer2012R2数据中心版不管安装什么组件,都显示存储空间不足,无法应用命令,错误代码0x80070008。最终确认是服务器配置过低的原因,因为这个型号是低级别的配置,1核CPU、1G内存带40G系统盘,内存要求没有满足,所以会出现这个错误。解决办法有两个:1.升级配置。2.手动增加虚拟内存。打开计算机的属性,在高级设置里面就能添加虚拟内存,我为它添加了4G的虚拟内存。然后重新安装IIS和.NET3.5等等,就都成功了。...

【转】Windows2012设置文件夹权限报错:failed to enumerate objects in the container.

Windows2012设置文件夹权限报错:failedtoenumerateobjectsinthecontainer. 通过cmd命令进行设置 找到系统中的cmd.exe文件,或者在桌面上新建一个批处理文件(打文本文档输入cmd保存,将文件本文件后辍txt改为bat),右击用管理员权限打开批处理文件转到指定的路径,此处设置E:/abc/soft的文件夹,可以用命令转到E:/abc目录:输入 ( 格式“takeown/f foldername /r/dy”)takeown/f soft /r/dy 回车  上面命令执行完后再输入命令(格式“icacls foldername /grant administrators:F/T”)icacls soft /grant everyone:F/T此处命令中的用户名可根据实际需求进行设定转发:https://www.cnblogs.com/softcode/articles/4...

Windows使用Vagrant&VirtualBox搭建虚拟开发环境

   Vagrant是一款用来构建虚拟开发环境的工具,我们可以通过Vagrant封装一个Linux的开发环境,分发给团队成员;成员可以在自己喜欢的桌面系统Mac/Windows/Linux上开发程序,代码却能统一在封装好的环境里运行,非常便于统一开发环境1.安装Vagrant虚拟工作环境   安装VirtualBox   下载地址:https://www.virtualbox.org/   安装Vagrant   下载地址:https://www.vagrantup.com/   下载box   box是一个后缀为box的文件,实际上它就是一个包含了虚拟机配置,虚拟机硬盘镜像和Vagrant配置的压缩包,可以到http://www.vagrantbox.es/上下载box       附一个CentOS7的下载...

Vagrant安装完lnmp后,配置linux和windows共享文件并配置虚拟主机访问项目

虚拟机目录下的Vagrantfile文件是vagrant的配置文件,如果想把虚拟机当作一台服务器,可以通过ip访问,需要修改配置文件进行配置。(1)第一步:打开虚拟机目录下的Vagrantfile文件,指定一个private_network   #Createaprivatenetwork,whichallowshost-onlyaccesstothemachine #usingaspecificIP. config.vm.network"private_network",ip:"192.168.10.31"这里指定这台虚拟机的访问ip是162.168.10.31.然后在终端输入:vagrantreload命令,重启虚拟机,加载新的配置。  (2)第三步:把Windows本地的目录映射到虚拟机的目录config.vm.synced_folder"D:\phpStudy\WWW","/home/wwwroot/default"它表示把Windows本地的目录映射到虚拟机的目录。这样当你访问192.168.10.31的时...

vagrant在windows下的使用

下载安装VirtualBox:https://www.virtualbox.org/下载安装Vagrant:http://www.vagrantup.com/下载需要使用的box:添加box如下添加一个debian的boxE:ubuntuvagrant-box-ngixn-php-fpm-mysql-redis-nodejs>vagrantboxadddebianpackage.box==>box:Addingbox'debian'(v0)forprovider:box:Downloading:file://E:/ubuntu/vagrant-box-ngixn-php-fpm-mysql-redis-nodejs/package.boxbox:Progress:100%(Rate:11.0M/s,Estimatedtimeremaining:--:--:--)==>box:Successfullyaddedbox'debian'(v0)for'virtualbox'!vagrantfile在任何vagrant工程下面都有一个vagrantfile,就像makefil...
代码星球 代码星球·2020-11-21
首页上一页...2627282930...下一页尾页