📄 protocol.h
字号:
/*/////////////////////////////
// prtocol.h //
/////////////////////////////*/
//协议中用到的结构和函数的声明,以及宏定义
#include <windows.h>
#include <stdio.h>
#include <winsock.h>
#include <stdlib.h>
#include<time.h>
#define MAX_PKT 1024 //包的最大字节数
#define MAX_SEQ 1
#define TIMEOUT 15000 //超时重发时间
typedef unsigned int seq_nr;//序号和确认号
//packet的定义
typedef struct{
unsigned char data[MAX_PKT];
}packet;
typedef enum{data,ack,nak} frame_kind;//定义frame_kind
//定义事件的类型
typedef enum{frame_arrival,time_out} event_type;
//帧的结构
typedef struct{
frame_kind kind; //帧的类型
seq_nr seq; //序号
seq_nr ack; //确认数
packet info; //网络层数据
int checksum; //校验域
}frame;
//奇偶校验
int checksum_mat(int framekind,int frameseq,packet p);
//连接函数,返回连接到服务器是否成功
bool connect_to_server(SOCKET &sock);
//从网络层取一个数据帧
void from_network_layer(packet *p);
//从物理层取到一个帧将它拷贝到r,返回取到的数据个数
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 timeout);
//定义更新状态变量的宏
#define inc(k) if (k<MAX_SEQ) k=k+1;else k=0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -