学习目标:
Linux
linux应用开发(高级编程):
(1)数据存储问题:文件和数据库
(2)多任务编程:进程 和 线程
(3)网络编程:tcp udp
学习内容:
网络编程: 3、通信协议网络程序设计
学习时间:7.16.2024
学习产出:
网络编程:
1、c/s模式
2、tcp/ip协议族
应用层
传输层 udp(视频、音频) 或者 tcp(网络密码)
网络层
网络接口层
头 【 】 尾 校验
3、基于udp协议c/s程序设计流程
客户端:创建套接字--》发送数据包--》接收--》关闭套接字
服务器:创建套接字--》绑定--》接收--》发送--》关闭套接字
通信协议设计:
问题:服务器是如何知道客户端要做什么操作?
-
{
1、用户通信协议包格式的设计,通过组织和解析该协议包通信双方能够正常通信
2、协议包:功能码 数据区
功能码:数据包请求功能
数据区:为了实现功能所需要的数据
3、设计方案:
(1)自定义字符串
a 两个特殊字符作为开头和结尾
b 一个特殊字符作为分隔符
组包:利用字符串处理函数
解包:利用字符串处理函数
##register$mike$123a##
##sucess##
##failed$name$repeat##
##failed$passwd$error##
(2) 二进制报文格式:
设计一个描述报文头的结构体
设计多个描述报文体的结构体
通过报文头和报文体组合---表达各种协议包
组包:memcpy()
解包:指针强转和指针移动
字符串和二进制的比较:
字符串:1)定长 2)译码容易
二进制:1)变长 2)灵活 3)空间利用率高 4)译码难
(3)json格式
(4)probuf
}