`
jakielong
  • 浏览: 223287 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

抓包程序的包存储队列

阅读更多
typedef struct _Node
{
    int     data_len;       // 存储在节点中的数据长度
    char    *data;          // 存储在节点中的数据
    struct  _Node *next;    // 队列中的下一个节点地址
}NODE;
 
typedef struct _Queue
{
    NODE    *head;          // 队列的头部
    NODE    *end;           // 队列的尾部
    int     count;          // 队列长度
}QUEUE;
 
bool InitQueue( QUEUE *queue )
{
    if( NULL == queue )
    {
        return false;
    }
 
    queue->head = NULL;
    queue->end = NULL;
    queue->count = 0;
 
    return true;
}
 
// 在队列中插入节点
bool Enqueue( QUEUE *queue, char *queue_data, int data_len )
{
    if( NULL == queue || NULL == queue_data )
    {
        return false;
    }
 
    // 开辟新节点
    NODE *new_node = (NODE *)malloc( sizeof(NODE) );
    if( NULL == new_node )
    {
        return false;
    }
 
    // 开辟空间存储数据
    new_node->data = (char *)malloc( data_len );
    if( NULL == new_node->data )
    {
        return false;
    }
 
    memcpy( new_node->data, queue_data, data_len );
    new_node->next = NULL;
    new_node->data_len = data_len;
 
    // 如果队列为空,则新节点即是头部,也是尾部
    if( queue->head == NULL )
    {
        queue->head = new_node;
        queue->end = new_node;
    }
    else
    {
        // 如果队列不为空,将此节点连接到队列的尾部
        queue->end->next = new_node;
 
        // 队列新尾部指向此节点
        queue->end = new_node;
    }
 
    queue->count ++;
    return true;
}
 
// 从队列中读出一个节点
NODE *Dequeue( QUEUE *queue )
{
    if( NULL == queue )
    {
        return NULL;
    }
 
    // 如果队列为空,则无数据可从数列读出,直接返回
    if( NULL == queue->head )
    {
        return NULL;
    }
 
    // 保存队列首节点
    NODE *node_tmp = queue->head;
 
    // 将首节点的下一个节点(第二个节点)设置为首节点,即删除了首节点
    queue->head = node_tmp->next;
 
    // 如果新首节点为空,则队列为空
    if( NULL == queue->head )
    {
        queue->end = NULL;
    }
 
    queue->count --;
    return node_tmp;
}
 
// 释放队列所有内存
void FreeQueue( QUEUE *queue )
{
    if( queue )
    {
        return;
    }
 
    NODE *tmp_node1 = queue->head;
    while( tmp_node1 )
    {
        NODE *tmp_node2 = tmp_node1;
 
        free( tmp_node1->data );
        free( tmp_node1 );
 
        tmp_node1->data = NULL;
        tmp_node1 = NULL;
 
        tmp_node1 = tmp_node2->next;
    }
}
 

 

分享到:
评论

相关推荐

    一款漫画阅读APP,独立开发,数据来源于腾讯动漫网,通过爬虫抓包获取.zip

    爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的...

    java开源包8

    Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式...

    java开源包4

    Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式...

    java开源包1

    Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式...

    java开源包2

    Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式...

    java开源包3

    Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式...

    java开源包6

    Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式...

    java开源包5

    Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式...

    java开源包10

    Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式...

    java开源包11

    Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式...

    java开源包7

    Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式...

    java开源包9

    Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式...

    python爬虫教程系列、从0到1学习python爬虫.zip

    包括浏览器抓包,手机APP抓包,如 fiddler、mitmproxy,各种爬虫涉及的模块的使用,如:requests、beautifulSoup、selenium、appium、scrapy等,以及IP代理,验证码识… 爬虫(Web Crawler)是一种自动化程序,用于...

    java开源包101

    Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式...

    Java资源包01

    Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式...

    JAVA上百实例源码以及开源项目源代码

    FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户可以在终端上...

    JAVA上百实例源码以及开源项目

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    C++网络爬虫项目

    基于布隆算法,对欲加入队列的原始统一资源定位符进行过滤,以防止已被抓 取过的URL再次入队,降低冗余开销同时避免无限循环。 2.2.3. 原始统一资源定位符(RawUrl) 提供原始形态的统一资源定位符字符串的简单包装,...

    知乎大神萧井陌web前端课程

    第16章 抓包&爬虫基础、爬虫精讲、编码&API; 第17章 数据结构基础和算法分析原理、链表队列栈和四大结构、平衡二叉搜索树和哈希表 第18章 bbs基础、bbs标题和回复、bbs其他 第19章 web安全和应对、服务器的配置文件...

Global site tag (gtag.js) - Google Analytics