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

📄 tcp.h

📁 本程序是一个RS232转网口的。是一个透明传输的模块
💻 H
字号:
/*
*****************************************************************************************************
*
*  File name: tcp.h
*****************************************************************************************************
*/
#ifdef   OS_GLOBALS
    #define  OS_EXT
#else
    #define  OS_EXT  extern
#endif



/*
*****************************************************************************************************
*
*  
*****************************************************************************************************
*/
//----------------------------------------------------------------------
//
//                            以下代码跟TCP有关
//
//----------------------------------------------------------------------
#define STATE_CLOSED					0
#define STATE_LISTEN					1
#define STATE_SYN_RCVD					2
#define STATE_ESTABLISHED				3
#define STATE_CLOSE_WAIT				4
#define STATE_LAST_ACK					5
#define STATE_FIN_WAIT_1				6
#define STATE_FIN_WAIT_2				7
#define STATE_CLOSING					8
#define STATE_TIME_WAIT					9
#define STATE_SYN_SENT					10

// TCP flag bits
#define FLG_FIN						0x01
#define FLG_SYN						0x02
#define FLG_RST						0x04
#define FLG_PSH						0x08
#define FLG_ACK						0x10
#define FLG_URG						0x20


/*
*****************************************************************************************************
* 
*****************************************************************************************************
*/
#define TCP_TIMEOUT				100		// = 1 seconds
#define FINALTIMEOUT            3200    //32 seconds


//保活定时器相关
#define INACTIVITY_TIME			2		// = 2 minutes
#define ATY_MINUTE				60      // = 1 minute , 每隔INACTIVITY_TIME*ATY_MINUTE发一次ARP包
#define ATY_ARP_TIME			3		// = 3 seconds,发出ARP探测包后,隔ATY_ARP_TIME秒判断系统是否崩溃

#define ATY_ACTIVE				0       //两分钟到可以发ARP探测状态
#define ATY_ARP_SEND			1       //两分钟到已发出ARP探测状态


#define TCP_BUF_LEN				1460    // 套接字数组里有UNACK-PBUF,有WAITFORSEND-PBUF,有REVER-PBUF
#define QUEENLEN                1       // edit by hjz

#define WNDSIZE					1460   // edit by hjz
#define RESENDCOUNT				10

// Allow 2 seconds to receive an ARP reply
#define ARP_TIMEOUT	 4		  // 0.5 second intervals


/*
*****************************************************************************************************
* 
*****************************************************************************************************
*/
#define NO_CONNECTION  			2       //定义几个套接字

#define CLIENT					0		//定义套接字类形为客户端
#define SERVER					1		//定义套接字类形为服务端

//extern CONNECTION xdata  conxn[NO_CONNECTION];   
#define IndexOfClient           0	    //客户端套接字序号 conxn[IndexOfClient]
#define IndexOfSever            1	    //服务端套接字序号 conxn[IndexOfSever]
/*
*****************************************************************************************************
* 
*****************************************************************************************************
*/
// Protocol identifier field in IP datagram
//IP协议
#define ICMP_TYPE     0x01
#define IGMP_TYPE     0x02
#define TCP_TYPE      0x06
#define EGP_TYPE      0x08
#define UDP_TYPE      0x11
#define IGRP_TYPE     0x58
#define OSPFIGP_TYPE  0x59
#define ENCAP_TYPE    0x62



/*
*****************************************************************************************************
* 
*****************************************************************************************************
*/
extern CONNECTION xdata  conxn[NO_CONNECTION];         //save
extern unsigned long  xdata initial_sequence_nr;	   //save
extern xdata union sw Server_PORT;
extern xdata union IP_address my_ServerIP;
extern xdata union netcard TCPSend;					   // 用于TCP发送缓冲区		 save

extern xdata struct wait arpwait;		               //用于等待ARP.
extern xdata union IP_address sender_ipaddr;		   //保存发送者的IP地址


extern unsigned int xdata LocalPort;			    //本地端口
extern unsigned int xdata HeartTimeOutBak; //初始心跳包时间

extern bit SendHeartFlag;
extern bit HttpFlag;


/*
*****************************************************************************************************
* 
*****************************************************************************************************
*/
void SocketIndexInit(unsigned char socket);
void TcpInit(void);

void tcp_inactivity(void);
void tcp_retransmit();
void tcp_rcve(union netcard xdata *pRxdnet);
void tcp_send(union netcard xdata *pTxdnet,unsigned char flags, unsigned char hdr_len, unsigned char index_conn);
void ip_send(union netcard xdata *pTxdnet,union IP_address ip, unsigned char proto_id, unsigned int len);
unsigned char verifytcpcrc(union netcard xdata *pRxdnet);//对tcp头进行校验,错误返回0,正确返回1
void createtcpcrc(union netcard xdata *pTxdnet,unsigned int len);//生成TCP包CRC校验

void tcp_senddata(union netcard xdata *pTxdnet,unsigned char xdata * psource,unsigned int len,unsigned char index_conn,unsigned char resend);



unsigned char  DataToUnAck(unsigned char xdata *  pSource,unsigned int iLen,unsigned char index,unsigned long ack,unsigned long seq);

void  InerClose(unsigned char sock);
void TCP_ATYARP(void);



⌨️ 快捷键说明

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