网络编程项目(3) -- 7.17.2024

学习目标:

Linux
在这里插入图片描述

linux应用开发(高级编程):
(1)数据存储问题:文件和数据库
(2)多任务编程:进程 和 线程
(3)网络编程:tcp udp


学习内容:

网络编程: 3、通信协议网络程序设计


学习时间:7.17.2024


学习产出:

网络通信:
{
  1、基于udp协议的c/s模式通信
  2、通信协议包的设计
           组成: 功能码  数据区
          (1)自定义字符串
                           组包:利用字符串处理函数
                           解包:利用字符串处理函数
          (2)二进制报文格式
                           组包:memcpy()
                           解包:指针强转和指针移动
}

1、协议包格式判断
2、利用scanf和sprintf自定义字符串报文


json格式通信协议包设计:
{
一、概念
    {
        1、是一种轻量级的数据交换格式
        2、采用完全独立于编程语言的文本格式来存储和表示数据
        3、简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言
        4、易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率
    }
}

二、json数组组织
    1、由“键-值”对组织和表示数据。由{}括号组织
{

1)、
{
  type:"add",
  data1:23,
  data2:46
}

{
   result:69
}


2)、
[
{
  name:"mike",
  age:23,
  score:78.5
}
{
  name:"lucy",
  age:24,
  score:80.5
}
]

}

    2、键和值的类型
	1)键类型是字符型
    	2)值的类型:	1)基本类型:整形、浮点型、实型
			2)复合类型:json类型、数组类型

{

1)、
{
  class1:[{name:"mike",
             age:23,
             score:78.5},
             {name:"lucy",
             age:24,
             score:75.5}]

}

2)、
{
shanxi :{
              xian:{weather:"rainy",temp:23,hum:67%,pm:12}
              baoji:{weather:"rainy",temp:22,hum:60%,pm:15}
            }


}
3)、
{
  name:"mike",
  age:23,
  score:{
              english:89,
              chinese:78,
              math:90
           }
}

}

    3、json中键的值是唯一的,值可以重复
	“键是手段,数据是目的”


三、json组包和解包
	由第三方库提供实现 以源码形式提供
  1、组包:添加“键-值”对,转成字符串
	{
            (1)定义cJSON 指针并创建json对象
                         cJSON *json = NULL;
                       json = cJSON_CreateObject();
              (2) 添加多个"键-值”对
                       cJSON_AddItemToObject()  
            (3)将json对象转成json格式字符串
                      char *p = cJSON_Print()
              (4) 释放空间和对象:
                         free(p)
                   cJSON_Delete(json);	
	}	
	
  2、解包:将字符串转为json格式对象,由键获取值
	{
          (1)定义cJSON 指针
                        cJSON *json = NULL;
            (2)  将字符串转为json格式对象
                        json = cJSON_Parse(字符串)
          (3)由键获取值
                     node =  cJSON_GetObjectItem(json,键)

                     如果node是空的,没有值
                     判断node指向的键的类型,并转为指定键值
                      if(node->type == cJSON_String)
                             node->valuestring
                      if(node->type == cJSON_Number)
                             node->valueint;
                       if(node->type == cJSON_Number)
                             node->valuedouble;

            (4)  删除json对象
                        cJSON_Delete(json); 	
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值