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

📄 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 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 + -