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

📄 protocol.h

📁 网络实验网络实验网络实验网络实验网络实验
💻 H
字号:
// protocol.h: interface for the Cprotocol class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_PROTOCOL_H__C45915CE_6FBA_4EDA_9847_92239569DCC0__INCLUDED_)
#define AFX_PROTOCOL_H__C45915CE_6FBA_4EDA_9847_92239569DCC0__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <winsock.h>

//定义更新状态变量的宏
 #define inc(k) if (k<MAX_SEQ) k=k+1;else k=0

#define MAX_PKT 1500       //包的最大字节数
#define MAX_SEQ 1
 
typedef unsigned int seq_nr;//序号和确认号

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

typedef enum{data,ack,nak} frame_kind;//定义帧的类型

  //定义事件的类型
typedef enum{frame_arrival,cksum_err,time_out,nothing} event_type;

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

class Cprotocol  
{
public:
	Cprotocol();
	virtual ~Cprotocol();
public:
  //求校验和
  int  checksum_mat(int framekind,int frameseq,packet p);
 
  //从网络层取一个数据帧
  void from_network_layer(packet *p);

   //从物理层取到一个帧
  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 time);

};

#endif // !defined(AFX_PROTOCOL_H__C45915CE_6FBA_4EDA_9847_92239569DCC0__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -