C中的重传服务器队列实现

时间:2014-01-30 10:11:14

标签: c data-structures network-programming packet

我想在服务器端函数上实现队列:

  1. 将数据包存储在队列中(从recvfrom缓冲区复制)
  2. 按ID搜索数据包并检索它们以进行重传
  3. 获取具有不同ID的2个数据包并一起处理
  4. 删除ID相同的数据包
  5. 在计时器到期时删除队列中的所有数据包
  6. 我已经阅读了很多内容,但我不确定这个问题,链表,哈希表的最佳数据结构是什么?我没有这个领域的经验,我需要最有效算法的建议

    谢谢

2 个答案:

答案 0 :(得分:1)

对于高效的数据结构链表是最佳选择。例如链接列表中的udp数据结构

/* The UDP data packet structure */

struct udp_data
{
   struct udp_data* u_next;
   short id;    /* id for this packet */
   void *   u_data;     /* packet data */

   //Add more field if you want
   ......................................
   .........................................

};

typedef struct udp_data *UDP_DATA;

最重要的是你必须知道链表管理。

答案 1 :(得分:0)

据我所知,解决此类问题的最佳方法是使用标准头,远远地使用具有相同头长度的所有数据包然后获取头大小数据,从头知道数据包长度并从数据包中获取数据包长度数据游泳池,并重复相同。

希望能找到答案。

例如

struct Common_header{
        float ver;
        int flag;
        int msg_type;
        int msg_len;    
};

struct Req_Cim_Nim_Snr{
        struct Common_header header;
        char master[30];
        char cpe[30];   
};

struct Req_Cim_Nim_Fwr{
        struct Common_header header;
        char fwr_link[200]; 
};

在两个请求消息中我都有一个包含消息长度的struct头,所以我首先获取头部并获取msg_len长度的咬合数以获取整个消息。

关于数据结构,因为它的第一个出口链表很好。