📄 protocol.h
字号:
// protocol.h: interface for the Cprotocol class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_PROTOCOL_H__3B6A3E62_03D8_46B6_BF43_E65D80D1DF44__INCLUDED_)
#define AFX_PROTOCOL_H__3B6A3E62_03D8_46B6_BF43_E65D80D1DF44__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <winsock.h>
//定义更新状态变量的宏
#define inc(k) if (k<MAX_SEQ) k=k+1;else k=0
#define MAX_PKT 1500 //包的最大字节数
#define MAX_SEQ 7
typedef unsigned int seq_nr;//序号和确认号
//包的定义
typedef struct{
char data[MAX_PKT];
}packet;
//定义帧的类型
typedef enum{data,ack,nak} frame_kind;
//定义事件的类型
typedef enum{frame_arrival,cksum_err,time_out,nothing} event_type;
//帧的结构
typedef struct{
frame_kind kind; //帧的类型
seq_nr seq; //序号
seq_nr ack; //确认数
packet info; //网络层数据
int checksum; //校验域
}frame;
typedef struct{
bool doack;
frame recvframe;
}Receivebuffer;
typedef struct {
Receivebuffer *recvbuffer;//初始化的动态分配存储空间
int front; //头指针,若队列不空,指向队列头元素
int rear; //尾指针,若队列不空,指向队列尾元素的下一个位置
}RecvQueue;
class Cprotocol
{
public:
Cprotocol();
virtual ~Cprotocol();
public:
//求校验和
int checksum_mat(packet p);
//检查效验和,返回检查的结果
bool examine_checksum(frame f);
//从网络层取一个数据帧
void from_network_layer(packet *p);
//从物理层取到一个帧
int from_physical_layer(SOCKET sock,frame &r);
//发送一个数据帧,控制发送,模拟链路质量
void send_frame(SOCKET sock,frame s);
//将数据发送到网络层
CString to_network_layer(packet p);
//将数据发往物理层准备传送
void to_physical_layer(SOCKET sock,frame &s);
//等待一个事件发生,返回事件类型
void wait_for_event(SOCKET sock,event_type &event);
};
#endif // !defined(AFX_PROTOCOL_H__3B6A3E62_03D8_46B6_BF43_E65D80D1DF44__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -