有关TCP、UDP的SOCKET共存的问题

pbjacob 2016-07-21 10:52:33
打算编写一个对话框程序,里面既有TCP通信,又有UDP通信。
我已经完成了UDP通信,方式是:新建一个基类为CSOCKET的新类,命名为CMySocket,重载OnReceive函数。对话框中创建一个该类的对象m_pMyUDPSocket,该对象用于UDP协议的数据通信。

现在我想在原程序基础上增加TCP通信,想法有两个:

想法一:
类不增,增对象。即,再创建一个CMySocket类的对象m_pMyTCPSocket,用于TCP协议的数据通信。两个对象可以在初始化的时候传一个标识参数,用于明确自己是哪种协议的,以使OnReceive里可根据不同的标识作不同的处理。

想法二:
增类,增对象。即,重新创建两个基类为CSOCKET的新类,一个为CMyTCPSocket类,另一个为CMyUDPSocket类,分别重载OnReceive函数,分别创建类的对象,处理各自协议下的通信。

无论第一种还是第二种,我都有这样一个问题:
当TCP协议的数据到来时,会只触发m_pMyTCPSocket对象的OnReceive么?同理,当UDP协议的数据到来时,会只触发m_pMyUDPSocket对象的OnReceive么?是否一定需要通过绑定不同的端口才能实现?
另外,我提出的两种想法,哪个更好一些?

谢谢!
...全文
208 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
draculacsdn 2016-07-21
  • 打赏
  • 举报
回复
tcp端口不能复用,所以直接用两个类,两个实例,免得混乱;如果想集中处理,那就写一个静态或全局处理函数,当tcp或udp收到数据后调用这个处理函数
shenyi0106 2016-07-21
  • 打赏
  • 举报
回复
一个实例只有一个socket句柄,你需要两个socket句柄,就需要两个实例,至于这两个实例是来自于同一个对象,还是不同的对象这取决于你自己的设计。个人觉得用同一个对象,通过参数开控制实例比较好,因为需要维护的文件少。当然我以前的一个同事也跟我说过,相同功能的不同执行路径,用不同的函数去实现,这样结构上更清晰。这个在于自己的设计思想,我是觉得用参数来控制,以后代码比较好维护。 可以绑定相同的端口,但是需要用REUSER选项。也可以用不同的端口,这取决于你的业务实现。

18,356

社区成员

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

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