📄 tcp.h
字号:
//-----------------------------------------------------------------------------
// TCP.H
//
//-----------------------------------------------------------------------------
#include "main.h" // toupper
// TCP states
#define STATE_CLOSED 0 //表示没有连接
#define STATE_LISTEN 1 // 监听来自远方TCP端口的连接请求
#define STATE_SYN_SEND 2 //在发送连接请求后等待匹配的连接请求
#define STATE_SYN_RECEIVED 3 //在收到和发送一个连接请求后等待对连接请求的确认
#define STATE_ESTABLISHED 4 //代表一个打开的连接,数据可以传送给用户
#define STATE_CLOSE_WAIT 5 //等待从本地用户发来的连接中断请求
#define STATE_LAST_ACK 6 // 等待原来发向远程TCP的连接中断请求的确认
#define STATE_FIN_WAIT_1 7 //等待远程TCP的连接中断请求,或先前的连接中断请求的确认
#define STATE_FIN_WAIT_2 8 //从远程TCP等待连接中断请求
#define STATE_CLOSING 9 //等待远程TCP对连接中断的确认
#define STATE_TIME_WAIT 10 //等待足够的时间以确保远程TCP接收到连接中断请求的确认
// TCP flag bits
#define FLG_URG 0x0020 //紧级位
#define FLG_ACK 0x0010 //确认位
#define FLG_PSH 0x0008 //急迫位
#define FLG_RST 0x0004 //重置位
#define FLG_SYN 0x0002 //同步位
#define FLG_FIN 0x0001 //结束位
// Miscellaneous
#define NO_CONNECTION 5
#define TCP_TIMEOUT 4 // = 2 seconds
#define INACTIVITY_TIME 30 // = 15 seconds
#define TCP_COM 1 //发送TCP的命令
#define TCP_TDATA 2 //发送TCP的数据
#define TCP_HTTP 3 //发送TCP的数据
#define TCP_END 0 //无发送
/* TCP分组格式 */
typedef struct
{
UWORK16 usSourcePort; //源端口号
UWORK16 usDesPort; //目标端口号
UWORK32 ucSERIESNUM; //序号 //接收的序列号是回复的确认号。
UWORK32 ucTRUECODE; //确认号 //回复时的确认号是接收的序列号加1。
UWORK16 ucMOVENUM; //偏移量
UWORK16 ucWINDOWBIG; //窗口大小
UWORK16 ucTCPCHECK; //校验位
UWORK16 ucMUSGPOINT; //紧急指针
UWORK8 options[32]; //相关选项
}ST_TCP_FORMAT;
typedef struct //表示同时可以接收的多少个IP地址的数据
{
UWORK32 ipaddr;
UWORK16 usDesPort; //回复TCP时,目标端口与等于接收TCP数据中的源端口号
UWORK32 ucTRUECODE; //回复TCP时的确认号,等于接收到TCP的序列号加1
UWORK32 ucSERIESNUM; //发送或回复时自己的序列号
UWORK32 ucBakSERIESNUM; //备份序列号
UWORK32 ucRESERIESNUM; //接收到数据后确认时用的.回复的序列号,等于接收数据的确认号
UWORK32 ucBakTRUECODE; //备份确认号
UWORK8 HttpFlag;
UWORK8 timer;
UWORK8 ReSendNum; //重发次数
UWORK8 inactivity;
UWORK8 state;
UWORK16 SendLen;
UWORK8 query[30];
} Str_CONNECTION;
typedef struct
{
UWORK8 xdata *buf;
UWORK32 ipaddr;
UWORK8 proto_id;
UWORK16 len;
UWORK8 timer;
} Str_WAIT;
extern UWORK8 HttpSendFlag; //HTTP有发送的数据
extern Str_CONNECTION xdata StrConnection_buf[5];
extern char xdata text[];
extern void tcp_ReSend(UWORK16 TLen, UWORK8 nr);
extern void tcp_ReSendBack(UWORK16 TCPHead_len, UWORK8 nr);
extern void tcp_ReBack(UWORK16 flags, UWORK16 hdr_len, UWORK8 nr);
extern void TCPReceive(void);
extern void tcp_retransmit(void);
extern void tcp_inactivity(void);
extern void init_tcp(void);
extern void TcpFromSeries(UWORK8 *pucAddr,UWORK16 usLen); //串口的数据发送给TCP
extern void tcp_Send(UWORK16 flags, UWORK16 TCPHead_len, UWORK8 nr, UWORK8 *TData, UWORK16 TLen);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -