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