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

📄 tcpip.h

📁 这是一个用单片机控制网卡传输的程序,集成了TCP/IP协议,使用硬件为89C51+RTL8019,另外传输另一端是计算机串口,可以方便的实现数据验证
💻 H
📖 第 1 页 / 共 2 页
字号:

/*IP包   仅当IHL=5时用 当不=5时作转换*/
struct    ip
        {
        unsigned int head[9];          /*以太网包头*/
        unsigned char verandihl;        /*版本与头长度*/
        unsigned char typeofserver;     /*服务类型*/
        unsigned int totallength;      /*总长度*/
        unsigned int frameindex;       /*IP帧序号*/
        unsigned int segment;          /*分段标志*/
        unsigned char ttl;             /*生存时间*/
        unsigned char protocal;        /*下一层协议*/
        unsigned int crc;              /*校验和*/
        unsigned int sourceip[2];      /*源IP*/
        unsigned int destip[2];        /*目的IP*/
        unsigned char packet[1498];     /*IP包的内容*/
        };
struct    ippacket
        {
        unsigned int head[9];          /*以太网包头*/
        unsigned int ippacket[720];     /*IP包的内容*/
        };

struct    arp
        {
        unsigned int head[9];  /*以太网头  */
        /*arp报文的内容总长28字节*/
        unsigned int harewaretype;   /*以太网为0x0001*/
        unsigned int protocaltype;    /*ip 为0X0800*/
        unsigned char halength;        /*=0X06*/
        unsigned char palength;         /*=0X04*/
        unsigned int operation;         /*操作  0X0001为请求   0X0002为应答  */
                                         /*0X0003为反向地址请求 0X0004为反向地址应答*/
        unsigned int sourcenodeid[3];   /*源网卡地址*/
        unsigned int sourceip[2];       /*源IP地址*/
        unsigned int destnodeid[3];      /*目的网卡地址*/
        unsigned int destip[2];          /*目的IP地址*/
        };
struct    icmp
        {/*包含在IP包中,是IP的上层为0X01的应用*/
        unsigned int head[9];     /*以太网头*/
        unsigned int iphead[10];  /*IP头*/
        unsigned char type;  /*0X08 PING请求 0X00 PING应答*/
        unsigned char option; /*0X00 PING*/
        unsigned int crc;
        unsigned int id;
        unsigned int seq;
        unsigned char icmpdata[1478];
        };
//struct    tcp
//        {
//         unsigned int head[9];
//        unsigned int iphead[10];
//        unsigned int sourceport; /*源端口*/
//        unsigned int destport;   /*目的端口*/
//        unsigned long seqnumber; /*顺序号*/
//        unsigned long acknumber;  /*确认号*/
//        unsigned char offset;       /*数据偏移量*/
//        unsigned char control;     /*连接控制*/
//        unsigned int window;      /*流控*/
//        unsigned int crc;        /*校验和 ,包括伪头部,TCP头部,数据*/
//        unsigned int urg;         /*紧急指针*/
//        unsigned char tcpdata[1478];    /*TCP数据*/
//        };

struct    udp
        {
         unsigned int head[9];
        unsigned int iphead[10];
        unsigned int sourceport; /*源端口*/
        unsigned int destport;   /*目的端口*/
        unsigned int length;
        unsigned int crc;        /*校验和 ,包括伪头部,udp头部,数据*/
        unsigned char udpdata[1478];    /*udp数据*/
        };

/*所有协议的共用体*/
union    netcard
        {
        struct    {
                unsigned char  bytebuf[1536];
                }bytes;
        struct    {
                   unsigned int wordbuf[768];
                }words;
        struct    ethernet    etherframe;
        struct    retransmit    rtframe;
        struct    arp            arpframe;
        struct    icmp        icmpframe;
//        struct    tcp            tcpframe;
        struct    ip            ipframe;
        struct    udp            udpframe;
        struct    ippacket    ippacket;
        };
struct    socket_type
        {
        unsigned int my_port; //本机端口
        unsigned int dest_port;//对方端口
        unsigned int dest_ip[2];//对方ip
        unsigned int dest_node_id[3];//对方的以太网地址
        unsigned long irs;//初始化顺序号
        unsigned long iss;//我的初始化序列号
        unsigned long rcv_nxt;//对方的顺序号
        unsigned long snd_nxt;//我的已经发送顺序号
        unsigned long snd_una;//我的还没有确认顺序号
        //unsigned long dest_ack_number;
        unsigned int rcv_wnd;//对方的window大小
        unsigned int snd_wnd; //我的window大小
        unsigned int dest_max_segment_size;//对方接受的最大的数据包大小MTU
        unsigned int my_max_segment_size;//我能接受的最大的数据包大小
        unsigned long my_wl1;//seq
        unsigned long my_wl2;//ack
        unsigned char state;//连接状态
        unsigned char open;

       };


/*TCP 状态定?
#define    TCP_STATE_LISTEN        0
#define tcp_state_syn_rcvd      1
#define tcp_state_syn_sent      2
#define tcp_state_established   3
#define TCP_STATE_FIN_WAIT1     4
#define TCP_STATE_FIN_WAIT2     5
#define TCP_STATE_CLOSING       6
#define tcp_state_close_wait       7
#define tcp_state_last_ack      8
#define TCP_STATE_CLOSED        9
#define tcp_state_time_wait     10
//tcp连接的标志位
#define tcp_fin                 0x01
#define tcp_syn                 0x02
#define tcp_rst                 0x04
#define tcp_psh                 0x08
#define tcp_ack                 0x10
#define tcp_urg                 0x20
*/

////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//#define My_TCPPort                1024
//#define tcp_max_rt                9  //tcp包最多重发的次数
///////////////////////////////函数//////////////////////////////////
/////////////////////////////////////////////////////////////////////
void write_register(unsigned char address_offset,unsigned char value);
unsigned char read_register(unsigned char addr);
void write_dma_port(unsigned char value);
unsigned char read_dma_port();
void rtl8019as_page(unsigned char pagenumber);
void readmynodeid_self();
void writemynodeid();
void send_packet(unsigned int length);
void rtl8019as_reset();
void rtl8019as_init();
unsigned char check_new_packet();
unsigned int read_93c64(unsigned char address);
void write_93c46(unsigned char address,unsigned int value);
void do_93c46(unsigned char dataes);
void delay_ms(unsigned char ms_number);
void delay_100ms(unsigned char number);
void send_char(unsigned char ascii);
void send_string(unsigned char code *string);
void send_hex(unsigned char senddata);
void send_word(unsigned int asciiword);
void send_long(unsigned long asciilong);
unsigned char string_compare(unsigned char code *string,uchar number);
void readmask();
void readnetgate();
void readmyipadd();

/////////////////////////函数/////////////////////////
/////////////////////////////////////////////////////

unsigned int    createipheadcrc();
unsigned int checksum(unsigned int * check , unsigned int length);
unsigned char    verifyipheadcrc();
unsigned int  createicmpcrc();
void arp_answer();
void arp_request(unsigned long ip_address);
void gateway_arp_request();
void arp_process();
void ping_request();
void process_ping();
void copy_to_retransmit_buffer();
void create_ip_packet(unsigned int length,unsigned int ip0,unsigned int ip1,unsigned char protocal);
void ping_answer();
void ping_echo();
//void send_reset();
//void delete_socket();
void retransmit_packet(unsigned char i);
void do_retransmit_buffer();
void do_data_receive(unsigned int length);
//unsigned char free_rt();
unsigned char get_char();
unsigned int copy_data();
unsigned char  verifyudpcrc();
void process_udp();
void udp_request(unsigned long ip_address, unsigned int portnumber);
void process_udp_command();
void process_command();
void serial_init();

⌨️ 快捷键说明

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