if (ack >= exp_ack) { ++ expect_frame; if (next_frame < last_buffered_frame) { SendFRAMEPacket((unsigned char*)(&buffer[next_frame % BUFFER_SIZE]), buffer[next_frame % BUFFER_SIZE].size); ++ next_frame; } } else break; } return 0; } //超时 case MSG_TYPE_TIMEOUT : { cout << \ //超时重发 for (int i = expect_frame; i < next_frame; ++ i) { unsigned int frameNum = ntohl(buffer[i % BUFFER_SIZE].head.seq); //if (timeoutNum > frameNum) continue; cout << frameNum << endl; SendFRAMEPacket((unsigned char*)(&buffer[i % BUFFER_SIZE]), buffer[i % BUFFER_SIZE].size); } return 0; }
default : break; } return -1; } /*
* 选择性重传测试函数 */
int stud_slide_window_choice_frame_resend(char *pBuffer, int bufferSize, UINT8 messageType) { return 0; }
五、 思考题
1. 退回 N 帧协议不必像 1bit 滑动窗口协议一样,允许发送完一
帧后不等确认帧而继续发送,提高了发送效率。 2. 缺点是在重传时可能重新传送已经正确发送的数据帧。
相关推荐: