设计面向对象的同步接收器和发射器

时间:2013-09-10 18:48:56

标签: c++ c oop sockets protocols

我正在为一个同步发送器和接收器的数据通信类项目工作。发送器将是使用套接字的服务器,当接收器客户端连接时,它将分叉并向接收器发送消息,该消息存储在作为服务器启动时的参数给出的文本文件中。

我的问题不是实现,我知道如何实现所有这些功能。我的问题是如何在C ++中将它组织成类等。

消息将是2个SYN字符,一个表示消息长度的控制字符,以及最多64个字节的消息数据。

我的第一个想法是我想要一个服务器类和一个客户端类。我将有2个主要功能,一个将具有服务器(发送器)对象,另一个将具有客户端(接收器)对象。从这些最高级别的课程升级,我不知道如何组织较低级别的课程。

我需要一个独特的"物理","数据链接"和"应用"层。物理层将处理将消息转换为二进制,计算奇偶校验等。数据链路层将对消息进行帧化,并且应用程序将是最高级别。如何组织这些?命名空间?

就像我说的,实施不是我的问题。只是设计,我常常感到沮丧,因为我觉得我们在设计和组织事情方面没有足够的教学。 C ++是我的专业领域,C也没关系,我只是没有经验,没有类等的高级应用程序。

随意推荐阅读经典设计模式书,因为我有一份副本。感谢大家的帮助。

1 个答案:

答案 0 :(得分:0)

我的提示是你有一个客户端和服务器使用的“消息”类。该类将封装网络洋葱层。既然你想要发送和接收消息,你可以有两个构造函数 - 一个用于组装基于参数发送的消息,一个用于将输入的原始流解析为接收的消息 - 或者是纯虚拟基础两个派生类。

不要试图在消息类中引用服务器或客户端类;使耦合成为一种方式,使服务器/客户端类使用消息对象。

还为服务器/客户端类使用纯虚拟基础,表示套接字的接口。 假设TCP:这也是服务器维护的连接的基础,因为每个连接都是一个单独的套接字。服务器核心的套接字是一个listen()套接字,不需要进行任何读取或写入,只需要accept(),但是当它执行时它会创建一个新的连接对象,其套接字将是读取和写入,因此这些是可以由基类包装的例程。总结一下:

abstract class "TCPsocket" 
    -> derived class "Server"
    -> derived class "Client"
    -> derived class "Connection"

Server对象将包含不同数量的活动Connection对象; Client对象只是一个Client对象。