ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++实现一个客户端连接多个服务器(TCP)

2021-08-02 18:29:59  阅读:270  来源: 互联网

标签:socket 管理系统 C++ 下位 TCP 连接 服务端 客户端


        最近,根据项目需求,需要实现一个工业控制管理系统。该管理系统需要去连接大量的用于工业控制的下位机。下位机作为TCP服务端,开放一个固定的端口,等待管理系统的连接(下位机的这种网络模式不可更改)。管理系统需要连接并管理好这些下位机,实时与下位机进行数据通信。该项目的难点在于下位机的数量很多(少则数百,多则数千)。

         管理系统作为TCP连接的客户端,主动去与下位机(服务端)建立连接。对于每一个下位机, 管理系统(客户端)都需要new一个socket,与服务端的建立连接,连接成功后,管理系统需要保存好这个socket,以便需要时进行通信(如果不保存这个socket,每次通信时都需要先建立TCP连接,那么实时性会大打折扣)。假设有两千个下位机,管理系统就需要维护两千个socket,那么如何维护好这么多的socket呢?对每条连接都建立一个线程?下位机的数量是个位数的情况下还算凑合,两千个线程?开什么玩笑,就算你同意计算机也不会同意的。

        如果管理系统作为服务端,开放某个TCP端口,下位机作为客户端,主动与服务端建立连接,那么,这就是传统的C/S模式,开发这种系统对于初学者也应该是小菜一碟。在传统的C/S模式下,服务端管理着大量的socket,每个socket对应着一个客户端。常见的网络模型有select模型,但这种模型管理的socket数量有限制,不超过1024个,而且在socket较多时,基于轮询机制select模型会力不从心,这时就可以用大名鼎鼎的ICOP模型了。可是,该项目中的下位机只能作为服务端,管理系统只能作为客户端,ICOP模型还能排上用场吗?答案是:可以!

        如果对ICOP的机制比较精通的话,就会发现,和完成端口绑定的socket并没有区分socket是服务端的还是客户端的,只要把一个socket绑定到完成端口上,在这个socket上投递recv操作即可接收网络数据。这就是我在研究透IOCP机制的基础上找到的思路。

        各位大侠还有什么更好的解决方案,可以给我留言。需要源码的朋友,这里不方便提供(项目太大),但我可以提供关键步骤的代码,建议深入研究一下IOCP的工作机制,否则可能无处下手。QQ:459238972

标签:socket,管理系统,C++,下位,TCP,连接,服务端,客户端
来源: https://blog.csdn.net/zhangxi8211/article/details/119330012

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有