学习目标:
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);
}