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

📄 protocol.h

📁 网络实验网络实验网络实验网络实验网络实验
💻 H
字号:
/*/////////////////////////////
//        prtocol.h          //
/////////////////////////////*/
//协议中用到的结构和函数的声明,以及宏定义

#include <windows.h>
#include <stdio.h>
#include <winsock.h>
#include <stdlib.h>

#define MAX_PKT 1024       //包的最大字节数
#define MAX_SEQ 7
#define TIMEOUT 15000      //超时重发时间
 
typedef  int seq_nr;//序号和确认号

 //packet的定义
typedef struct{
	    unsigned char data[MAX_PKT];
   }packet;

typedef enum{data,ack,nak} 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;
                          
  //检查奇偶效验是否正确,返回检查的结果
  bool examine_checksum(frame f);

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

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

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

  //连接函数,返回监听和接收是否成功
  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 + -