2020/03/09 基于UDP的自定义协议

笔记1 编写自定义协议的过程

1.  ./include/msg.h 头文件 声明函数

2. ./src/msg.c  包含"msg.h"文件,然后给出函数的定义

3. 编译msg.c 并生成msg.o文件    gcc -o obj/msg.o -Iinclude -c src/msg.c 

4. 修改echo_udp_client,客户端发送和接收改用自定义函数,并设定发送信息的头部

5. 编译gcc -o bin/echo_udp_client -Iinclude obj/msg.o src/echo_udp_client.c

6. 修改echo_udp_server,解析客户端发送信息的顺序

7. 编译gcc -o bin/echo_udp_server -Iinclude obj/msg.o src/echo_udp_server.c

8. 运行服务端和客户端程序

笔记2解决服务端bug

现在遇到的问题是:

运行服务端会出现connnect error

追溯此问题出现的原因发现,面向无连接的UDP不需要connect()函数,但想要从sockfd套接字中获取客户端的地址,UDP是通过recv()recvfrom()等函数实现的,这就麻烦了TwT,因为我要用自定义的接收函数呀!

现在的任务:

1. 搞清楚UDP的接收函数  2. 找到获取客户端地址的方法  3. 如果找不到接收地址的方法,就更换排序方法(可以把顺序放在体部的第一位,然后根据第一位数据进行解析排序,但提取的消息不保存序号)

笔记3 标准输入流 占位符

STDIN_FILENO

属于系统API接口库,其声明为 int 型,是一个打开文件句柄,对应的函数主要包括 open/read/write/close 等系统级调用。

操作系统一级提供的文件API都是以文件描述符来表示文件。

STDIN_FILENO是标准输入设备(一般是键盘)的文件描述符

使用STDIN_FILENO的函数有:read、write、close等

而标准C++一级提供的文件操作函数库都是用FILE*来表示文件,stdin就是指向标准输入设备文件的FILE*

使用stdin的函数主要有:fread、fwrite、fclose等

%zu格式字符串  输出size_t类型需要用这个占位符,eg:

size_t val = get_the_value();printf("%zu",val);

z部分是长度说明符,表示参数的长度为Size_t。

猜你喜欢

转载自blog.csdn.net/Xinyue_Lu/article/details/104760417