WIN网络编程-IOCP服务程序设计注意事项

用完成端口开发大响应规模的Winsock应用程序(4) 接受连接请求服务器要做的最普通的事情之一就是接受来自客户端的连接请求。在套接字上使用重叠I/O接受连接的惟一API就是AcceptEx()函数。有趣的是,通常的同步接受函数accept()的返回值是一个新的套接字,而AcceptEx()函数则需要另外一个套接字作为它的参数之一。这是因为AcceptEx()是一个重叠操作,所以你需要事先创建一个套接字(但不要绑定或连接它),并把这个套接字通过参数 阅读详情
IOCP服务程序设计注意事项
1、内存资源管理
  每个重叠的发送或接收操作所提交的数据缓冲区很可能会锁定。内存被锁定之后,它不能从物理内存换出。但操作系统对锁定内存的数量(不是投递的操作数量)有限制,如果服务器预期处理大量的并发客户,可以在每个连接上投递一个0字节的接收操作,这样不会有内存锁定。0字节的接收操作完成后,服务器可以简单执行一个非阻塞的接收来获取缓存内部SOCKET接收缓冲区中的所有数据。当非阻塞接收调用以WSAEWOULDBLOCK失败之后,就不有未决的数据了。
   系统页的大小需要考虑,使用GetSystemInfo函数来获取当前系统的页大小,即使一个操作投递了比当前页大小还要小的的缓冲区,系统实际会为它锁定当前系统页大小的空间,这样造成空间浪费。
2、接受连接
  能使用重叠I/O接受客户的WINSOCK函数仅为AcceptEx,必须保证外面有足够的AcceptEx调用,以便及时处理到来的连接。调用listen后,会自动接受到来的连接放入系统队列(在AcceptEx处理时,其它待AcceptEx处理的连接放入系统队列),但最大不能超过listen函数指定的backlog限制,这意味着要投入多个AcceptEx,否则,AcceptEx的数量加上listen函数指定的backlog数量限制了当前能够进来的连接数量。建议对AcceptEx的调用数量在最小值和最大值之间变化,未决I/O小于最小值时,增加额外的AcceptEx I/O。
  使用WSAEventSelect函数为监听SOCKET关联事件对象,注册FD_ACCEPT通知消息。如果投递的AcceptEx操作用完,但仍有到来的客户连接,事件对象就会受信,说明需要投递额外的AcceptEx I/O。
3、恶意客户连接问题
 恶意客户不断调用connect函数连接服务器,不发送数据,也不关闭连接。服务器应记录所有AcceptEx的未决I/O。在线程中遍历它们对每个客户SOCKET以SO_CONNECT_TIME为调用getsockpot函数,检查连接建立的时间,时间过长的一律关闭
4、包重新排序
  提交到I/O完成端口的操作是按顺序提交,但线程调度会造成顺序错乱,需要给每个提交写I/O的缓冲区对象增加序列号,保证数据的连续传送。同理,每个提交的读I/O也要分配序列号,
构建工业级C++跨平台架构:从分层设计到部署实战 跨平台开发是现代高性能软件,如工业控制、音视频处理和游戏引擎等领域的核心需求,旨在实现代码在Windows、Linux、macOS等多操作系统环境下的稳定运行。其核心原理在于通过抽象层隔离平台相关细节,依赖倒置原则确保高层业务逻辑不依赖于底层具体实现。这种架构的技术价值在于保障了行为一致性、提升了代码可维护性,并使得性能可控。在应用场景上,它广泛服务于需要大规模部署和高可靠性的工业级软件项目。本文聚焦于C++语言,深入探讨如何设计清晰的分层模型,并实践关键模块如文件系统、线程同步和网络通信的跨平台抽象,最终 阅读详情

相关推荐

C/C++实现PC热点与UDP广播自动发现TCP通信的物联网调试方案

在物联网和近场通信场景中,设备间的快速自动发现与稳定数据传输是核心技术需求。其原理通常基于IP网络协议栈,通过UDP广播实现零配置的服务发现,再利用TCP协议建立可靠的端到端连接。这种技术组合在智能硬件配网、设备调试、局域网文件传输等场景中具有重要价值,它能有效解决无路由器环境下设备互联的难题。本文聚焦于C/C++工程实践,详细解析了在Windows/Linux双平台下,如何编程开启PC无线热点,设计并实现基于魔数和长度前缀的UDP广播发现协议,以及构建健壮的多线程TCP服务器与客户端。文中深入探讨了**W

weixin_30553777的博客 333

开发Winsock应用

开发Winsock应用 通常要开发网络应用程序并不是一件轻松的事情,不过,实际上只要掌握几个关键的原则也就可以了——创建和连接一个套接字,尝试进行连接,然后收发数据。真正难的是要写出一个可以接纳少则一个,多则数千个连接的网络应用程序。本文将讨论如何通过Winsock2在Windows NT? 和 Windows 2000上开发高扩展能力的Winsock应用程序。文章主要的焦点在客户机/服务

971

Qt Socket编程避坑指南:TCP粘包、UDP丢包与跨平台兼容性问题全解析

本文深入解析Qt Socket编程中的常见问题,包括TCP粘包处理、UDP可靠性优化及跨平台兼容性陷阱。通过实战案例和代码示例,详细介绍了消息头+长度字段方案、自适应定时器改进、可靠UDP协议设计等解决方案,帮助开发者提升网络通信的稳定性和性能。

weixin_30411239的博客 454

【转】关于Socket和IOCP的一些值得注意的地方

转至:http://laokaddk.blog.51cto.com/368606/287039关于Socket和IOCP的一些值得注意的地方 IOCP是一整套高性能的IO操作异步模型,可以用在文件操作也可以用在网络SOCKET操作上面。当用在网络SOCKET上时,在服务器端主要配合AceeptEx WSASend WSASendto来使用,在客户机端主要配合ConnectEx...

diche7031的博客 183

S7-1200 Modbus TCP客户端配置实战:从基础设置到数据交互详解

本文详细介绍了S7-1200 Modbus TCP客户端的配置方法,从基础设置到数据交互的完整流程。涵盖硬件准备、TIA Portal配置、MB_CLIENT指令参数详解、数据缓冲区管理及实战测试,帮助工程师快速掌握西门子PLC与Modbus TCP通信的关键技术。

fire9的博客 311

达梦数据库(DM)的备份与恢复功能

本文系统介绍了达梦数据库(DM)的备份与恢复功能,主要包括作业系统和物理/逻辑备份还原两大模块。作业系统部分详细说明了通过代理环境创建定时备份和删除备份作业的步骤;物理备份还原部分阐述了联机和脱机备份方式,包括数据库、表空间、表和归档的备份还原操作;逻辑备份还原部分介绍了dexp/dimp工具的使用方法及四种级别的导入导出功能。文章还介绍了图形化管理工具进行备份还原的操作流程,全面覆盖了达梦数据库的数据保护方案,为数据库管理员提供了详细的技术指导。

weixin_48812832的博客 1212

IOCP是一整套高性能的IO操作异步模型

IOCP是一整套高性能的IO操作异步模型,可以用在文件操作也可以用在网络SOCKET操作上面。当用在网络SOCKET上时,在服务器端主要配合AceeptEx WSASend WSASendto来使用,在客户机端主要配合ConnectEx WSARecv和WSARecvFrom来使用。这几天用IOCP模型模仿IPMSG软件时有一些感触,分享如下:(这里没有具体的使用常识,这部分请参考《Windows

lziog的专栏 1810

STM32内存大小与地址的对应关系以及计算方法

1、概述 在计算机中要访问存储区,都是通过地址来进行访问的,包括所有的外设(比如串口、内存、硬盘等),都对应有一个访问地址,地址就相当于门牌号,有了门牌号,我们才知道操作的是哪一个区域、哪一个外设。 最被大家熟知的是计算机内存,计算机内存有4G、8G,16G等等,对于程序员而言,要在代码中操作这些内存,肯定得知道内存的地址,此外,还需要会计算地址与内存大小的计算方法与对应关系。STM32作为微

Ace's Blog 4万+

关于Socket和IOCP的一些值得注意的地方

关于Socket和IOCP的一些值得注意的地方     IOCP是一整套高性能的IO操作异步模型,可以用在文件操作也可以用在网络SOCKET操作上面。当用在网络SOCKET上时,在服务器端主要配合AceeptEx WSASend WSASendto来使用,在客户机端主要配合ConnectEx WSARecv和WSARecvFrom来使用。这几天用IOCP模型模仿IPMSG软件时有一些感触,

章志强的专栏 739

如果使用ssms连接SQLserver的时候出现无法连接到服务器。

如果使用ssms连接SQLserver的时候出现无法连接到服务器。 Lan 2020-03-29 22:11 329 人阅读 0 条评论 标题: 连接到服务器------------------------------无法连接到...

Vastsa的博客 1万+

【Unity动画系统】详解Root Motion动画在Unity中的应用(一)

什么时候勾选Bake into pose,当不希望动画带动游戏对象旋转时。在旋转的动画中一般是不用勾选的,因为就需要用它来带动我们的角色对象旋转。但在比如前进、后退、待机等动画来说,我们就可以勾选这里,以避免因动画文件本身的瑕疵而给我们带来的旋转。loop match:代表了这个动画在角度上的吻合度。如果这个动画在播放中转角过大,那么就会显示红色,告诉我们如果勾选bake into pose,则会带来不好的效果。

weixin_60154963的博客 6805

Windows服务器高并发处理IOCP(完成端口)详细说明

本系列里完成端口的代码在两年前就已经写好了,但是由于许久没有写东西了,不知该如何提笔,所以这篇文档总是在酝酿之中……酝酿了两年之后,终于决定开始动笔了,但愿还不算晚…..         这篇文档我非常详细并且图文并茂的介绍了关于网络编程模型中完成端口的方方面面的信息,从API的用法到使用的步骤,从完成端口的实现机理到实际使用的注意事项,都有所涉及,并且为了让朋友们更直观的体会完成端口的用法

Andrewniu的博客 588

05 Transformer 到底解决了什么问题

Transformer 是现代大语言模型的底层骨架。本文不推公式,而是从 CNN、RNN/LSTM 的瓶颈讲起,解释 Transformer 如何通过自注意力同时解决长距离依赖和并行训练问题,并说明它为什么能支撑 GPT、BERT 和现代大模型的规模化。

老于的笔记的专栏 248

小技巧、小经验(3)

1、多态作用: 多态的意义在于,它实现了接口重用(同一的表达式),接口重用带来的好处是程序更易于扩展,代码重用更加方便,更具有灵活性,也就能真实地反映现实世界。

brk1985的专栏 752

C# 动态壁纸实战:7步带你从零开始制作动态壁纸

动态壁纸是指在计算机桌面上播放视频、动画或交互式内容的一种技术。与传统的静态壁纸相比,动态壁纸更加生动有趣,可以大大提升桌面的观赏性和互动性。通过本文的详细讲解和代码示例,相信你已经学会了如何使用C#实现动态壁纸。动态壁纸不仅能够提升桌面的美观度,还能展示你的编程技能。希望这篇教程对你有所帮助,期待你在C#编程中取得更大的成就!🌟✨如果你有任何问题或建议,欢迎在评论区留言交流!希望这篇教程对你有所帮助,期待你在C#编程中取得更大的成就!😊✨😊✨。

java专栏 1673

【Unity大规模RTS/攻城战框架】Large Scale Combat System - RTS Sieges深度解析

本文介绍了Unity专业级大规模RTS战斗框架Large Scale Combat System(LSCS)。该系统通过Job System+Burst技术解决了万人级单位的性能问题,提供完整的RTS操作体系、动态阵型系统、战术AI和攻城战功能。其亮点包括可破坏城门、行走城墙、战术AI配置系统,支持URP渲染管线,适用于Total War风格的大规模兵团对战项目。LSCS不仅提供核心战斗系统,还包含UI、小地图等配套模块,是Unity中少有的专业级RTS解决方案,特别适合需要深度战术玩法和大规模战斗的开发者

2403_88403568的博客 1335

C++远程控制程序核心架构与实现:从Socket通信到屏幕捕获的实战解析

远程控制技术是网络编程与系统编程的典型结合,其核心原理在于通过网络协议将一台计算机的输入输出设备映射到另一台计算机。从技术实现层面看,它涉及TCP/IP Socket通信解决数据传输,自定义应用层协议处理粘包拆包问题,并运用多线程模型管理并发任务。其技术价值在于高效协调网络I/O与本地资源访问,实现低延迟的远程交互。在应用场景上,该技术不仅支撑了远程桌面、IT运维等工具,也是理解操作系统消息机制和图形接口的实践窗口。本文以C++项目为例,深入剖析了包括**图像捕获与编码**、**多线程同步**在内的核心模块

weixin_33978044的博客 295

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

DISPLAY_DEVICE结构

DISPLAY_DEVICEThe DISPLAY_DEVICE structure receives information about the displaydevice specified by the iDevNum parameter of the EnumDisplayDevicesfunction.typedef struct _DISPLAY_DEVICE {  DWORD

深未来技术 1599

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

windows陷阱分发机制

1、中断与异常是导致控制流转向的条件,硬件或软件可以检测这两种条件。2、内核对待中断的态度是:中断是异步事件,与处理器当前执行的任务无关;异常是同步事件,是一个特殊指令执行的结果3、异常和中断发生时,如果该线程在用户模式下执行,到该线程内核模式栈,在内核栈上创建一个陷阱帧,把线程的执行状态保存到该帧里。陷阱帧是线程完整执行环境的一个子集。4、内核安装了前端陷阱处理函数,在内核将

深未来技术 1101

WINDOWS环境子系统

1、应用程序调用WINDOWS系统的服务,如API等,都是是客户/服务请求的方式进行的。2、WINDOWS环境子系统做为服务端提供服务,主要有以下几方面:(1)环境子系统进程(Csrss.exe)包含以下支持:    控制台(文本)窗口    创建和删除进程和线程     对16位虚拟DOS机进程的一部分支持    其它一些函数,如GetTempFile、DefineDos

深未来技术 1098

截图c++代码

Capturing an ImageE文不好的人就直接看代码吧一、说明You can use a bitmap to capture an image, and you can store thecaptured image in memory, display it at a different location inyour applications window, or d

深未来技术 1058

列表类设置背景图片(VC+MFC)

在重载的类里添加消息响应函数HBRUSH CBitmapListBox::CtlColor(CDC* pDC, UINT nCtlColor){  CBrush m_brHollow; m_brHollow.CreateStockObject(HOLLOW_BRUSH); pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(RGB(64,32,0));

深未来技术 1042

windows操作系统关键的系统组件

一、 1、NTDLL。DLL系统支持库,用于子系统DLL,包含以下两种类型的函数:(1)系统服务分发存根,会调用WINDOWS执行体系统服务(2)内部支持函数,供子系统、子系统DLL及其他的原生映像文件使用第一组函数为执行体系统服务提供了接口,在用户模式下可以通过这些接口函数调用执行体的系统服务。对于每个这样的函数,NTDLL包含了一个同名的入口点。函数内部的代码包含了与处理器

深未来技术 1037
上一篇: WINDOWS实现精确定时程序
下一篇: WIN网络编程-网络扩展函数
deepfuture
博客等级 码龄17年 211粉丝 1287原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值