📄 protocol.h
字号:
/*/////////////////////////////
// prtocol.h //
/////////////////////////////*/
//协议中用到的结构和函数的声明,以及宏定义
#include <windows.h>
#include <stdio.h>
#include <winsock.h>
#include <stdlib.h>
#define MAX_PKT 1024 //包的最大字节数
#define MAX_SEQ 1
#define TIMEOUT 15000 //超时重发时间
typedef int seq_nr;//序号和确认号
//packet的定义
typedef struct{
char data[MAX_PKT];
}packet;
typedef enum{data,ack,nak} 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;
//检查效验和,返回检查的结果
bool examine_checksum(frame f);
//从物理层取到一个帧,返回取到的数据个数
int from_physical_layer(SOCKET sock,frame &r);
//连接函数,返回监听和接收是否成功
bool set_server(SOCKET * listensock,SOCKET * sessionsock);
//将数据发送到网络层
void to_network_layer(packet p);
//将数据发往物理层准备传送
void to_physical_layer(SOCKET sock,frame &s);
//等待一个事件发生,返回事件类型
void wait_for_event(SOCKET sock,event_type &event);
//定义更新状态变量的宏
#define inc(k) if (k<MAX_SEQ) k=k+1;else k=0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -