zoukankan      html  css  js  c++  java
  • LInux基础(04)项目设计一(理解链表管理协议的代码架构)

    要设计好一个项目必须要有一个健全的代码框架

      一个结构体内有数据域和处理数据的函数指针, 先实现管理链表的函数 增加节点  删除节点  清空链表  遍历节点对每个节点进行操作

                          再实现协议的注册 把对象socket 添加到链表中进行管理

    使用链表实现管理协议的操作 ,  创建链表(LinkListInit)对象 , 

    添加注册协议(尾部添加链表节点(RegisterProtocol)) ,

    删除协议(头部删除(DeleteProtocol)) ,

    遍历链表的节点并对每一个节点进行匹配函数操作(TraverseList) ,

    删除指定ID的协议(删除指定节点(DeleteNode)),

    清空链表(把所以节点删除(ClearProtocol)),  销毁协议对象(把链表对象置空(DestoryProtocolStack)), 返回链表长度(父链表对象的length(GetCurrentSize)).

    注册HTTP协议(InitHttp):1.新建(对象)节点(malloc)  

            2.设置对象(t_data里 id = HTTP ; flag = inuse; init = 另外写一个函数(InitHttpNode)连接或监听; SendFunction = 另外实现发送函数(HttpSendFunction))

              ( InitHttpNode: 设置连接的 ip地址 端口号 或 监听 用的...  HttpSendFunction : 发送send_buffer用的....

            3.把创建并设置好的对象添加到(RegisterProtocol)到链表对象里

    注册HTTPS TCP 协议的代码框架同HTTP

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 #define BUFFER_SIZE 0x1000
     5     
     6 #define HTTP  0x1
     7 #define HTTPS 0x2
     8 #define TCP   0x3
     9     
    10 #define INUSE  0x1
    11 #define UNUSE  0x2
    12     
    13 #define EMPTY   0x2
    14 #define NOEMPTY 0x3
    15 
    16 #define false 0
    17 #define ture 1
    18 
    19 /* Application parameters */
    20 #define DEBUG (1)
    21     /* Debug prints */
    22 #if DEBUG
    23     #define DBG_PRINT(fmt, args...)  do{printf("[*]Listlink: <%s>: " fmt "
    " 
    24                             ,__func__, ##args); } while (false)
    25 #else
    26     #define DBG_PRINT(...) do {} while (false)
    27 #endif
    28 
    29 
    30 typedef unsigned char  u8;
    31 typedef unsigned short u16;
    32 typedef unsigned int   u32;
    33 
    34 typedef struct _T_NodeStruct{
    35     u8  id;
    36     u8  flag;
    37     u8  send_buffer[BUFFER_SIZE];
    38     u32 (* Init)(void);
    39     u32 (* SendFunction)(int fd,u8 *send_buffer,u32 length);
    40 }T_NodeStruct;
    41 typedef T_NodeStruct * Pt_NodeStruct;
    42 
    43 
    44 typedef struct _T_ListLinkNode{
    45     T_NodeStruct              t_data;
    46     struct _T_ListLinkNode  * pt_next;
    47 }T_ListLinkNode;
    48 typedef T_ListLinkNode * Pt_ListLinkNode;
    49 
    50 typedef struct _T_list{
    51     Pt_ListLinkNode  pfront;
    52     Pt_ListLinkNode  prear;
    53     u32              length;
    54 }T_list;
    55 typedef T_list * Pt_list;
    56 
    57 
    58 void ClearProtocal( Pt_list ptlist );  //清空协议 利用Register调用的DeleteProtocol把链表内的节点全部删除
    59 void DeleteNode(Pt_list ptlist,u8 id);  //选择id进行删除节点
    60 void DeleteProtocal(Pt_list ptlist, Pt_ListLinkNode ptlistnode );  //删除头节点并备份要删除的数据 , 第二个参数也可以给NULL不保存
    61 void DestoryProtocalStack( Pt_list ptlist );    //把链表节点全部置空
    62 u32 GetCurrentSize( Pt_list ptlist );    //获得当前链表的长度
    63 u8 IsEmpty(Pt_list ptlist );    //判空
    64 Pt_list ListLinkInit( void );    //创建链表对象
    65 void RegisterProtocal(Pt_list ptlist,Pt_ListLinkNode ptlistnode );  //注册协议 , 把创建的节点对象添加到链表中,进行管理
    66 void TraverseList( Pt_list ptlist, void(* Traverse)(Pt_ListLinkNode ptlistlinknode,u8 *)); 
                                                   //匹配函数,根据传入的函数对链表中的每个节点进行操作

    //初始化协议节点
    67 u32 HttpSendFunction(int sock,u8 *send_buffer,u32 length)  //发送函数 write()

    68 u32 InitHttpNode()  //设置sockaddr_in socektaddr 的地址协议族 如:协议族 ip 端口
    69 Pt_ListLinkNode InitHttp(Pt_list ptlist, u8* pdata , u32 length)  //设置结构体
    //
    SendFunction = HttpSendFunction   Init = InitHttpNode   memcpy(send_buffer ,send_buffer , sizeof(send_buffer))
  • 相关阅读:
    JavaScript中Null和Undefined的区别
    javascript中的计算题
    数组去重
    javascript面向对象中继承实现的几种方式
    数列求值 题解
    首字母变大写 题解
    发工资咯:) 题解
    绝对值排序 题解
    数列有序 题解
    母牛的故事 题解
  • 原文地址:https://www.cnblogs.com/yxnrh/p/11399179.html
Copyright © 2011-2022 走看看