Socket客户端程序同时连接多种多个服务端-类怎么设计比较好

黑极 2014-12-24 04:45:02
目前在做一个项目,在类设计上有一些拿不准,还忘大家不吝赐教!

项目目前是用VC++、MFC做的客户端程序!
此程序会通过Socket通讯连接两类设备,每一类设备有至少3款,连接设备的数量不固定,每一类设备功能相似,通讯协议略有区别!
连接的设备都是Socket服务端,最好是多线程同时与各个设备上通讯。

目前是这么想的,每连接一台设备时,程序自动增加一个线程,根据设备类别自动初始化一个对应类来通讯
大概想法如下:
CSocketClient类继承CSocket:负责建立连接,调用ProtocolM1,ProtocolM2两个类
Stream类:负责打包、拆分数据包工作

ProtocolM1:第一类设备协议类,一些虚函数,一些此类设备的通用函数
ProtocolM2:第二类设备协议类,一些虚函数,一些此类设备的通用函数

ProtocolM1T1:继承ProtocolM1类,第一类第一款设备协议类,重写ProtocolM1设备中的虚函数
ProtocolM1T2:继承ProtocolM1类,第一类第二款设备协议类,重写ProtocolM1设备中的虚函数
...
ProtocolM2T1:继承ProtocolM2类,第二类第一款设备协议类,重写ProtocolM2设备中的虚函数
ProtocolM2T2:继承ProtocolM2类,第二类第二款设备协议类,重写ProtocolM2设备中的虚函数
...

新增设备时,跟据不同设备初始化CSocketClient中的ProtocolM1,ProtocolM2,
例如ProtocolM1 pm1 = new ProtocolM2T1();

还请大家帮忙看看可行么?如有表述不清的大家来问
...全文
245 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
黑极 2014-12-25
  • 打赏
  • 举报
回复
是我表述不清还是问的太傻?有没有人指点一下!
SiGoYi 2014-12-25
  • 打赏
  • 举报
回复
感觉楼主的基本思路应该没有问题。但有一点我感觉修改一下比较好。如下: Stream类:负责打包、拆分数据包工作 我个人感觉这个类完全没有必要,原因是你协议的解析已经有具体的类了(ProtocolM1,ProtocolM2),并且他们下还有子类,所以我个人建议你把“组包”和“解包”两个方法可以放在(ProtocolM1,ProtocolM2)中做为一个纯虚方法或虚方法,这样可以让子类来处理“组包”和“解包”的逻辑。 如果你使用Stream类来处理“组包”和“解包”逻辑,就会发现,Stream类与(ProtocolM1,ProtocolM2)甚至是他们的子类都有了很强的依赖关系,虽然也没什么不可以,但估计你写一写就会感觉很烦了。 以上! 楼主按你的思路写吧!完全没有问题,我做过类似的程序,思路也和楼主差不多。
一桶姜山 2014-12-25
  • 打赏
  • 举报
回复
能完整描述现实情况的类就是好的,之后再考虑优化
oyljerry 2014-12-25
  • 打赏
  • 举报
回复
通过基类,子类等来定义各种设备,公共的放基类,不同的放子类
笨笨仔 2014-12-25
  • 打赏
  • 举报
回复
仅以你的通信层面而言 1、从CWinThread继承产生自己的处理线程类,其中完成你的协议和虚函数之类 2、从CWinThread继承建立通信线程类,负责底层通信 每个处理线程对应自己的通信线程。 需要时创建一个线程新实例并启动它,线程间通过消息交换数据。 这样一来,所谓的 处理线程类 就成了“处理对象”,对就不同的设备,只要使用不同的对象就行了,将处理过程全部封装到类中。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧