📄 protocol.h
字号:
// protocol.h: interface for the Cprotocol class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_PROTOCOL_H__C45915CE_6FBA_4EDA_9847_92239569DCC0__INCLUDED_)
#define AFX_PROTOCOL_H__C45915CE_6FBA_4EDA_9847_92239569DCC0__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 1
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;
class Cprotocol
{
public:
Cprotocol();
virtual ~Cprotocol();
public:
//求校验和
int checksum_mat(int framekind,int frameseq,packet p);
//从网络层取一个数据帧
void from_network_layer(packet *p);
//从物理层取到一个帧
int from_physical_layer(SOCKET sock,frame &r);
//发送一个数据帧
void send_frame(SOCKET sock,frame s,int wp,int lp);
//将数据发往物理层准备传送
void to_physical_layer(SOCKET sock,frame &s,int wp,int lp);
//等待一个事件发生,返回事件类型
void wait_for_event(SOCKET sock,event_type &event,int time);
};
#endif // !defined(AFX_PROTOCOL_H__C45915CE_6FBA_4EDA_9847_92239569DCC0__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -