我有一个非常通用的问题。我试图在两层OSI的两个模块之间进行通信(假设传输层在A类中实现,而B类在网络层实现)。我理解的是,A类可以通过调用其方法将数据有效负载进一步转发到较低层来简单地使用B类。因此,A类具有B类知识,但反之亦然。
问题是,当B类从较低层接收数据时,如何将数据转发到A类(上层),因为它不知道A类。如何在C ++中实现这样的功能?为这类任务学习的重要主题是什么?
答案 0 :(得分:0)
只需在网络层类中编写setter / getter函数即可。更新传输层类时,它通过getter函数读取网络数据。
将网络作为传输的私有成员甚至是有意义的,因为没有网络,传输永远不会存在。
首先用笔和纸绘制所有类依赖项。修改它们几次,直到你的设计看起来最有意义。
答案 1 :(得分:0)
它在内核中的工作方式是传输层在网络层中注册回调。当网络层接收必须传输到网络层的数据报时,它调用该回调函数传递网络层数据报的有效载荷。网络层数据报知道它必须将数据报的有效载荷传递给特定的传输层协议,因为一个特定字段指示上层协议。在IPv4数据报的情况下,它是字段Protocol。
您可以用不同的方式在C ++中实现此回调:
当B收到协议X的数据报时,它会通知注册该协议的观察者,或者它调用已注册的回调或lambda。