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

📄 tcp.h

📁 完整的TCP/IP源代码,绝对好用
💻 H
字号:
/************************************************************************
*                                                                       
*   FILE NAME                                           VERSION                                        
*                                                                       
*       TCP.H                                               1.0          
*                                                                       
*   COMPONENT                                                             
*                                                                       
*       TCP - Transmission Control Protocol                              
*                                                                       
*   DESCRIPTION                                                           
*                                                                       
*       Holds the defines for the TCP protocol.                          
*                                                                       
*   DATA STRUCTURES                                                       
*                                                                       
*       TCPLAYER
*       _TCP_Window
*       _TCP_Port
*                                                                       
*   DEPENDENCIES                                                          
*                                                                       
*                                                                       
*************************************************************************/

#ifndef TCP_H
#define TCP_H
#include "C:\wql\tcpipsocket\target.h"


typedef struct tcph
{
    UINT16 tcp_src;             /* TCP Source port number */
    UINT16 tcp_dest;            /* TCP destination port number */
    UINT32 tcp_seq;             /* TCP sequence number */ 
    UINT32 tcp_ack;             /* TCP Acknowledgment number */
//    UINT8  tcp_hlen;            /* length of TCP header in 4 byte words */
    UINT16  flags;           /* the length (header) and flag fields */
    UINT16 tcp_window;          /* advertised window, byte-swapped */
    UINT16 tcp_check;           /* TCP checksum of whole packet */
    UINT16 tcp_urgent;          /* urgent pointer, when flag is set */
} TCPLAYER;

//*****************************************************
// 这是当TCP包丢失引起的数据的重传时采用的,目的是存放本次传送的数据分成的个个TCP包。
typedef struct 
{
  TCPLAYER TCP_HEAD;
  UINT32 expect_ack; //本包期望的确认号
  UINT8 R_ACK_NUM;
  UINT8 Repeat;  //重传的次数,如果超过设定的次数,则说明对方已经失去联络,要对其复位
  UINT8 Timer;   //超时时间,当本包数据超过这个时间还没有收到对方的确认时,要重新传送
  UINT8 *START_PTR; //在SOCKET输出缓冲中的起始位置
  UINT16 LENGTH;    //本包的长度
  UINT8 State;      //表示本包是否已经收到确认,0是已经收到了,1是没有收到

}TCP_WAIT_ACK_TYPE;



/* Define return codes for internal use by TCP. */
#define TCP_NO_ACK                  -255
#define TCP_INVALID_ACK             -254

/*
 * Options for use with [gs]etsockopt at the TCP level.
 */
#define TCP_NODELAY                 1

//***********************************************
#define  HTTP_PORT    80
#define  SMTP_PORT    25
#define  FTP_PORT     21
#define  FTP_DPORT    20
#define	 Eth2COM_PORT 14002
#define	 TELNET_PORT  9999
#define  SMTP_LOCAL_PORT 8888

//************************************************
#define  max_socket_in_len 0x0ff    //定义最大的SOCKET接收缓冲
#define  max_mm 0xff               //max_socket_in_len-1

#define  max_tcp_wait_num  10      //等待ACK的包的数量
typedef struct
{
  UINT8 ipaddr[4];
  UINT16  port;
  UINT32 his_sequence;
  UINT32 my_sequence; //他始终保存本方发送的最新的序号
  UINT32 old_sequence;
  UINT32 his_ack;   //他始终保存来自对方的最新的确认号
  UINT8   timer;    //当只传送了命令包时用来判断命令是否收到,如SYN发出后多长时间还没收到,则要重发
  UINT8  repeat; //重传的次数
  UINT8  S_R_ACK_NUM; //整个SOCKET中每次传输的多个TCP包中有一个收到确认多于3次,则此标志置3
  UINT8   inactivity;	 
  UINT8   state;
  UINT8   inbuf[max_socket_in_len+1];
  UINT16  inbuf_head;
  UINT16  inbuf_tail;

  TCP_WAIT_ACK_TYPE tcp_wait_ack[max_tcp_wait_num]; //这里设定最多30个等待的TCP包
  UINT8  wait_ack_num; //等待应答的总数
  UINT8  *outbuf;
  UINT16 outbuf_len;
  UINT16 offset; //传送完的部分指针

  UINT16  his_window;
  UINT16  local_port;
  UINT16  local_window;
  UINT16 flags; //00表示不需要传送任何东西,如果有PUSH说明有数据要传,其他为TCP的FLAG标志

} CONNECTION;

// TCP flag bits
#define FLG_FIN						0x0001
#define FLG_SYN						0x0002
#define FLG_RST						0x0004
#define FLG_PSH						0x0008
#define FLG_ACK						0x0010
#define FLG_URG						0x0020

// for socket window is 00
#define FLG_WIN_ZERO                0x0040

// TCP server states
#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_ACT_SYNED 			10
#define STATE_ACT_SYN_SENT		    11

// Miscellaneous
#define MAX_SOCKET_NUM          8  //最大的SOCKET数量
//#define FTP_CONNECTION        6
#define NO_CONNECTION  			MAX_SOCKET_NUM+1             // 1---4 is the connected port
#define TCP_TIMEOUT				4		// = 2 seconds
#define INACTIVITY_TIME			30		// = 15 seconds
//****************************************


extern CONNECTION xdata conxn[MAX_SOCKET_NUM];
//****************************************

/* TCP function prototypes. */
void TCP_Interpret(UINT8 *inbuf, struct pseudotcp *tcp_chk);
void tcp_send(UINT16 flags, UINT16 hdr_len,UINT8 nr);
UINT16 TCP_data_send(UINT8  * outbuf, UINT16 len, UINT8 nr);
void tcp_send_1_packet(UINT8  *buf, UINT16 len, UINT8 nr);
UINT8 find_leisure_connection();
void init_tcp(void);
void tcp_retransmit(void);
void tcp_inactivity(void);
void create_ftp_connect(unsigned char *server_ip,unsigned int server_port);
UINT8 CHECK_RSEND(CONNECTION *CN);
void TCP_TICK();
void tcp_timer_scan();
void Init_cn( CONNECTION * CN);

#endif /* TCP_H */


⌨️ 快捷键说明

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