2

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

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

消息将是 2 个 SYN 字符、一个指示消息长度的控制字符和最多 64 个字节的消息数据。

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

我需要一个不同的“物理”、“数据链路”和“应用程序”层。物理层将处理消息转换为二进制,计算奇偶校验等。数据链路层将帧消息,应用程序将是最高级别。如何组织这些?命名空间?

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

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

4

1 回答 1

0

我的提示是您有一个客户端和服务器都使用的“消息”类。该类将封装网络洋葱层。由于您既要发送消息又要接收消息,因此您要么有两个构造函数——一个用于根据参数组装要发送的消息,另一个用于将原始输入流解析为接收到的消息——或者一个纯虚拟基础对于两个派生类。

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

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

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

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

于 2013-09-10T19:02:18.797 回答