zoukankan      html  css  js  c++  java
  • socket字符流循环截取

    场景:socket 客户端将一个单向链表序列化后发送给服务端,服务端将之解析,重新构建单向链表。

    Client.cpp

     1 //遍历链表,填充到缓冲区
     2 char* formatBuf(ListNode* p, char buf[100])
     3 {
     4     ListNode* tmp = p;
     5     //处理空链表
     6     if (tmp == NULL)
     7     {
     8         std::cout << "空链表!" << std::endl;
     9     }
    10     memset(buf, 0, sizeof(buf));
    11     while (tmp->next != NULL)
    12     {
    13         tmp = tmp->next;
    14         //填充到缓冲区
    20         char tmpStr[25];
    21         sprintf(tmpStr, "%s/%s/%d ", tmp->Name, tmp->ID, tmp->Score); 
    22         strcat(buf, tmpStr);
    23     }
    24     return buf;
    25 }

    Server.cpp

     1 //字符流解析
     2 void parseStr(char* buf, int len)
     3 {
     4     //新建链表
     5     ListNode *head, *node, *ptr;
     6     head = (ListNode*)malloc(sizeof(ListNode));
     7     int i =0, count = 0; 
     8     char* p = buf;//offset ptr
     9     ptr = head;
    10     while(p < buf + len)
    11     {
    12         char name[5];
    13         char id[10];
    14         unsigned int s;
    15         //字符串截取
    16         sscanf(p, "%1s/%5s/%d", name, id, &s);
    17         //printf("%s %s %d 
    ", name, id, s);
    18         //申请空间
    19         node = (ListNode*)malloc(sizeof(ListNode));
    20         strcpy(node->Name, name);
    21         strcpy(node->ID, id);
    22         node->Score = s;
    23         ptr->next = node;
    24         node->next = NULL;
    25         ptr = node;
    26 
    27         p += 11;//指针偏移
    28     }
    29     printList(head);
    30 }

    参考资料

    【1】https://ask.csdn.net/questions/370828  (二楼回答,我根据回答修改的)

  • 相关阅读:
    Android ViewPager实现选项卡切换
    Android Fragment是什么
    Android 点击文字实现跳转
    海底捞的十五天,让我重当程序员
    saltstack 实现haproxy+keepalived
    saltstack 实现系统初始化
    saltstack 实现redis主从
    python类基础
    Mysql 数据库备份工具 xtrabackup
    Python函数式编程
  • 原文地址:https://www.cnblogs.com/yocichen/p/10662266.html
Copyright © 2011-2022 走看看