补全以下代码typedef enum{frame_arrival}event_type; #include "protocol.h" void sender2(void) { frame s; /*buffer for an outbound frame*/ packet buffer; /*buffer for an outbound packet*/ event_type event; /*frame_arrival is the only possibility*/ while(true){ from_network_layer(&buffer);/*go get something to send*/ s.info = buffer; /*copy it into s for transmission*/ to_physical_layer(&s); /*bye-bye little frame*/ wait_for_event(&event); /*do not proceed until given the go ahead*/ } } void receiver2(void) { frame r,s; /*buffers for frames*/ event_type event; /*frame_arrival is the only possibility*/ while(true) { wait_for_event(&event); /*only possibility is frame_arrival*/ from_physical_layer(&r); /*go get the inbound frame*/ to_network_layer(&r.info); /*pass the data to the network layer*/ to_physical_layer(&s); /*send a dummy frame to awaken sender*/ } }
时间: 2023-06-17 21:07:47 浏览: 153
SeqList.h #include <stdio.h> //包含标准输入输出流的头文件 #include <assert.h
这段代码是一个简单的基于传输层的协议的模拟程序,其中包含了发送方和接收方的函数实现。
其中,发送方的函数名为sender2(),其主要功能是从网络层获取数据,将数据封装成帧并通过物理层发送出去,然后等待接收到“帧到达”事件后再继续执行。具体实现步骤如下:
1. 从网络层获取数据,保存到packet类型的buffer变量中。
2. 将buffer变量中的数据封装成帧,保存到frame类型的s变量中。
3. 调用to_physical_layer()函数,将s变量中的帧通过物理层发送出去。
4. 调用wait_for_event()函数,等待接收到“帧到达”事件后再继续执行。
接收方的函数名为receiver2(),其主要功能是接收帧,将帧中的数据传递给网络层,然后发送一个dummy帧给发送方,以唤醒发送方并继续发送数据。具体实现步骤如下:
1. 调用wait_for_event()函数,等待接收到“帧到达”事件后再继续执行。
2. 调用from_physical_layer()函数,从物理层接收到帧,并保存到frame类型的r变量中。
3. 将r变量中的帧中的数据传递给网络层,通过调用to_network_layer()函数实现。
4. 构造一个dummy帧,保存到frame类型的s变量中。
5. 调用to_physical_layer()函数,将dummy帧通过物理层发送出去,以唤醒发送方并继续发送数据。
需要注意的是,这段代码中只实现了基本的功能,并没有考虑实际环境中可能出现的错误和异常情况,例如帧的丢失、损坏、重传等。如果要实现一个真正可靠的协议,需要考虑更多的细节和情况。
阅读全文