⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 protocol.h

📁 网络实验网络实验网络实验网络实验网络实验
💻 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 7
#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,can_write} event_type;

  //桢的结构
typedef struct{
	frame_kind kind; //桢的类型
	seq_nr seq;      //序号
	seq_nr ack;      //确认数
	packet info;     //网络层数据
	int checksum;    //校验域
}frame;

typedef struct{
	bool isack;
	frame sendframe;
	int time;
}Sendbuffer;

typedef struct{
	bool ischeck;//收到的确认,但还没有检查
	frame recvframe;
}Recvbuffer;
///

typedef struct{
	Recvbuffer *recvbuffer;
	int rfront;
	int rrear;
	int rtemp;
}RecvQueue;

typedef struct {
     Sendbuffer *sendbuffer;//初始化的动态分配存储空间
     int sfront;      //头指针,若队列不空,指向队列头元素
     int srear;       //尾指针,若队列不空,指向队列尾元素的下一个位置
	 int stemp;
}SendQueue;

  char  printbinary(const unsigned char val);
                           //奇偶校验
  int  checksum_mat(int framekind,int frameseq,packet p);

                           //连接函数,返回连接到服务器是否成功
  bool connect_to_server(SOCKET &sock);

                           //检查效验和,返回检查的结果
  //bool examine_checksum(frame f);

                           //从网络层取一个数据桢
  void from_network_layer(packet *p);
  char check_network_layer();

                           //从物理层取到一个桢将它拷贝到r,返回取到的数据个数
  int  from_physical_layer(SOCKET sock,frame &r);

                           //发送一个数据桢,控制发送,模拟链路质量
  void send_frame(SOCKET sock,frame s,int wp,int lp);

                           //连接函数,返回监听和接收是否成功
  //bool set_server(SOCKET * listensock,SOCKET * sessionsock);

  //将数据发送到网络层
  void to_network_layer(packet p);

  //将数据发往物理层准备传送
  void to_physical_layer(SOCKET sock,frame &s,int wp,int lp);
	 
  //等待一个事件发生,返回事件类型
  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 + -