当前位置:首页 > 工业控制 > 工业控制
[导读]摘要:利用Windows提供的完成端口(IOCP)模型,实现C/S模式下远程屏幕监控服务器同时对大量并发客户进行屏幕监控的功能,可以根据需要决定是否开始远程控制。用IOCP对多线程进行调度和管理,高效地利用系统资源。并且

摘要:利用Windows提供的完成端口(IOCP)模型,实现C/S模式下远程屏幕监控服务器同时对大量并发客户进行屏幕监控的功能,可以根据需要决定是否开始远程控制。用IOCP对多线程进行调度和管理,高效地利用系统资源。并且给出了整个系统的网络设计与实现过程。
关键字:IOCP;多线程;远程屏幕监控

    随着网络技术的不断发展,远程桌面共享技术已经越来越多地运用于远程办公、教育培训、远程监控等方方面面。微软在Windows NT 3.5中引入了IOCP(I/O Completion Port,I/O完成端口),该模型被广泛应用于大规模的网络服务器之上,远程屏幕监控服务器利用IOCP可以同时有效地对多个客户端屏幕进行监控。

1 远程屏幕监控系统的总体结构
    在Windows系统中,对于大型的服务器应用一般设计为C/S模式,通过在客户端和服务器之间建立网络连接来实现信息的传输。对于服务器来说,在同一时间可能需要监控多个客户端屏幕,在远程屏幕监控系统的大致结构如图1所示。


    由被监控的客户端捕捉屏幕图像,经过压缩之后实时地传输给服务器,服务器打开一个窗口,并将收到的客户端屏幕图像数据显示在该窗口中,如需对客户端进行控制,则服务器端将该窗口中捕捉到的鼠标键盘消息发送到客户端,客户端收到此消息后模拟出鼠标键盘点击事件,实现远程控制。采用IOCP机制,只需要为数不多的几个线程就同时为多个客户端提供服务,并且效率远高于其它网络模型。

2 IOCP机制的基本原理
    IOCP是性能最好的一种I/O模型。它是应用程序使用线程池处理异步I/O请求的一种机制。在处理多个并发的异步I/O请求时,以往的模型都是在接收请求时创建一个线程来应答请求。这样就有很多的线程并行地运行在系统中。而这些线程都是可运行的,Windows内核花费大量的时间在进行线程的上下文切换,并没有多少时间花在线程运行上。再加上创建新线程的开销比较大,所以造成了效率的低下。
    IOCP的目标是实现高效的服务器程序,它克服了一般并发模型的不足,其方法是在初始化完成端口的时候创建一定数量的服务线程。当系统完成I/O操作之后,向服务器完成端口发送I/O completion packet,此时线程池中的线程在完成端口上排队等待I/O操作的完成。如果在完成端口上没有收到I/O completion packet,这些线程处于睡眠状态。否则,这些线程按照后进先出(LIFO)的方式被唤醒,并完成后续数据处理操作。

3 服务器设计
    远程屏幕监控服务器的核心功能是将接收到的客户端的屏幕图像显示到一个服务器端窗口中,服务器通过此窗口对客户端进行远程控制。为了提高系统可靠性,网络协议采用面向连接的TCP协议,利用TCP协议中的拥塞避免以及超时和差错重传机制可以确保数据在传输的可靠性。
3.1 服务器监听套接字的实现
    在服务器端建立IOCP模型时,首先需要建立一个监听套接字,对于监听套接字,并不将它与完成端口相关联,而是调用WSAEventSelect为监听套接字注册FD_ACCEPT网络事件。该函数的声明如下:
   
    之后创建一个监听线程,在此线程中可以循环调用WSAWaitForMultipleEvents等待事件对象被触发。在该函数正确返回之后,继续调用WSAEnumNetworkEvents函数列举出发生在套接字上的事件,如果是FD_ACCEPT事件,则接受该连接,并将新建的套接字与创建的完成端口相关联,并在此套接字上调用WSARecv投递接收数据的请求。
3.2 IOCP模型的实现
    要建立IOCP模型,需要在服务器启动监听线程时,首先创建一个完成端口对象,通过调用CreateIoCompletionPort来实现,之后调用GetSystemlnfo函数获得CPU的数量,根据CPU的数量创建一定数量的服务线程在此端口上等待完成事件的通知,一般来说,服务线程的数量大约是CPU数量的2倍。
    当监听套接字接收到一个新的连接时,再次调用CreateIoCompletionPort将接收套接字与我们先前创建的完成端口绑定。这里的完成键pComleKey是一个指向ClientContext结构体的指针,该结构体包含了当前套接字的一些相关信息,接受和发送数据所用的缓存。接下来需要定义一个与I/O操作相关的结构体,保存与I/O操作相关的信息。该结构体的定义如下:
   
    其中m_ioType表示I/O操作的类型,接下来需要调用WSARecv发起重叠的I/O操作请求,并将向前创建的OVERLAPPEDPLUS结构体作为参数传递进去。具体如下:
   
    服务线程被启动后,调用GetQueuedCompletionStation函数等待重叠I/O操作的完成,当重叠I/O操作完成时,I/O操作完成通知包被发送到完成端口上,此时该函数返回,完成通知包包含的信息有已传输的字节数、完成键和重叠结构。根据返回的I/O操作的具体信息,调用相应的处理函数对结果进行处理。在处理完数据之后,需要再次向完成端口投递I/O操作请求。我们可以通过调用PostQueuedCompletion Status函数来向完成端口发送一个I/O操作完成通知包。图2是整个网络传输的工作流程图。



7 结束语
    在Windows7环境下建立服务器运行平台,100M局域网内,7个客户同时连接到服务器,服务器能正常运行,同时打开7个客户端的屏幕监控窗口,客户端屏幕图像显示无明显延迟,需要时可正常开启远程控制功能。基于IOCP的服务器理论上可以连接成百上千个客户端,但是由于网络带宽,硬件配置等限制,连接数量往往有一定的限制。基于IOCP的服务器程序优点在于能够对大量的客户连接进行有效管理,资源利用率高,具有易扩展性,随着硬件配置的提高,无需改动程序,其性能就可以随之提升。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

柏林2025年9月9日 /美通社/ -- 2025年9月5日,纳斯达克上市公司优克联集团(NASDAQ: UCL)旗下全球互联品牌GlocalMe,正式亮相柏林国际消费电子展(IFA 2025),重磅推出融合企...

关键字: LOCAL LM BSP 移动网络

深圳2025年9月9日 /美通社/ -- PART 01活动背景 当技术的锋芒刺穿行业壁垒,万物互联的生态正重塑产业疆域。2025年,物联网产业迈入 "破界创造"与"共生进化" 的裂变时代——AI大模型消融感知边界,...

关键字: BSP 模型 微信 AIOT

"出海无界 商机无限"助力企业构建全球竞争力 深圳2025年9月9日 /美通社/ -- 2025年8月28日, 由领先商业管理媒体世界经理人携手环球资源联合主办、深圳•前海出海e站通协办的...

关键字: 解码 供应链 AI BSP

柏林2025年9月9日 /美通社/ -- 柏林当地时间9月6日,在2025德国柏林国际电子消费品展览会(International Funkausstellung...

关键字: 扫地机器人 耳机 PEN BSP

武汉2025年9月9日 /美通社/ -- 7月24日,2025慧聪跨业品牌巡展——湖北•武汉站在武汉中南花园酒店隆重举办!本次巡展由慧聪安防网、慧聪物联网、慧聪音响灯光网、慧聪LED屏网、慧聪教育网联合主办,吸引了安防、...

关键字: AI 希捷 BSP 平板

上海2025年9月9日 /美通社/ -- 9月8日,移远通信宣布,其自研蓝牙协议栈DynaBlue率先通过蓝牙技术联盟(SIG)BQB 6.1标准认证。作为移远深耕短距离通信...

关键字: 蓝牙协议栈 移远通信 COM BSP

上海2025年9月9日 /美通社/ -- 为全面落实党中央、国务院和上海市委、市政府关于加快发展人力资源服务业的决策部署,更好发挥人力资源服务业赋能百业作用,8月29日,以"AI智领 HR智链 静候你来&quo...

关键字: 智能体 AI BSP 人工智能

慕尼黑2025年9月8日 /美通社/ -- 2025年9月8日德国国际汽车及智慧出行博览会(IAA MOBILITY)于慕尼黑开幕,广汽携旗下五款新能源明星车型亮相,正式发布未来移动出行的"广汽方案"...

关键字: 广汽 IO AI 移动

北京2025年9月8日 /美通社/ -- 近日,易生支付与一汽出行达成合作,为其自主研发的"旗驭车管"车辆运营管理平台提供全流程支付通道及技术支持。此次合作不仅提升了平台对百余家企业客户的运营管理效率...

关键字: 一汽 智能化 BSP SAAS

深圳2025年9月8日 /美通社/ -- 晶泰科技(2228.HK)今日宣布,由其助力智擎生技制药(PharmaEngine, Inc.)发现的新一代PRMT5抑制剂PEP0...

关键字: 泰科 AI MT BSP
关闭