嵌入式学习35-网络通信UDP聊天及TCP

题目:基于UDP实现直播间聊天的功能

需求:

软件划分为用户客户端和主播服务端两个软件client.c和server.c

用户客户端负责:

1.接收用户的昵称

2.接收用户输入的信息,能够将信息发送给服务端

3.接收服务端回复的数据信息,并完成显示

主播服务端负责:

1.对所有加入直播间的用户的IP地址和端口实现管理(加入、退出)

2.当有新的客户端加入时,能够向所有客户端提示:"欢迎 XXX 用户进入直播间"

3.当有客户端退出时,能够向所有客户端提示:"XXX 离开直播间"

4.能够实现客户端聊天内容的转发,当某个客户端发送聊天信息时,能够将该信息转给除了该用户之外聊天室内所有其余客户端用户

实现服务端对用户的管理(1.查看当前直播间的在线人数 2.能够实现禁言、踢出直播间功能)

TCP通信: (可做流量控制)

TCP发端: 5

1.socket 创建套接字文件 描述符
2.connect 发送链接请求
3.send 发送数据
4.recv 接受数据
5.close 关闭套接字fd

TCP收端: 7

1. socket
2.bind
在 套接字 上绑定一个 IP地址和端口号
3.listen
监听客户端发送的 连接请求
4.accept 处理 等待 连接队列 中的 第一个连接请求
5.send
6.recv
7.close close(fd),close(sockfd)

1.connect

int connect(int sockfd, const struct sockaddr *addr,

socklen_t addrlen);

功能:

发送链接请求

参数:

sockfd : 套接字文件描述符

addr : 目的地址 存放空间首地址

addrlen : IP地址的 大小

返回值:

成功返回0

失败返回-1

2.send

ssize_t send(int sockfd, const void *buf, size_t len, int flags);

功能:

发送数据

参数:

sockfd : 文件描述符

buf : 发送数据空间首地址

len : 发送数据的 长度

flags : 属性默认为0

返回值:

成功 返回 实际发送字节数

失败 返回 -1

3.recv

ssize_t recv(int sockfd, void *buf, size_t len, int flags);

功能:

接收数据

参数:

sockfd: 套接字文件描述符

buf: 存放数据空间首地址

len: 最大接收 数据的长度

flags: 属性默认为0

返回值:

成功 返回 实际接收字节数

失败 返回-1

如果对方退出,返回0

4.listen

int listen(int sockfd, int backlog);

功能:

监听客户端发送的 连接请求

该函数不会阻塞

参数:

sockfd: 套接字文件描述符

backlog: 允许等待的尚未被处理 的三次握手请求的最大个数 若最大接受10个 第11个不会接收 若处理完成10个 继续接收10个

返回值:

成功 返回 0

失败 返回 -1

5.accept

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

功能:

处理 等待 连接队列 中的 第一个连接请求

该函数具有阻塞功能 (如果没有人发送链接请求,会阻塞等待)

参数:

socket: 套接字文件描述符

address: 存放IP 地址的空间 首地址

addrlen: 存放IP 地址大小 空间首 地址

返回值:

成功 返回 一个新的文件描述符

失败 返回-1

相关推荐
~kiss~8 小时前
A Survey of On-Policy Distillation for LLMs 学习(一)
学习
小杨小杨、努力变强!10 小时前
python学习笔记
笔记·学习
Star(up up up)16 小时前
Redis Windows 安装教程:使用Windows 的 Redis 压缩包
redis·笔记·学习·程序人生·云原生·学习方法·改行学it
乌暮18 小时前
Spring AOP 与 Spring 事务:用大白话彻底理解原理与实践
java·数据库·spring boot·后端·sql·学习·spring
爱和冰阔落21 小时前
【Linux网络】TCP 半包粘包怎么解决?从长度报头、JSON 拆包到网络计算器完整实战
linux·运维·网络·tcp/ip
蒸蒸yyyyzwd1 天前
从邓明学习的后端笔记
笔记·学习
say_fall1 天前
【Linux网络编程】UDP套接字编程:系统编程组件、基础回显服务、InetAddr与地址转换、翻译服务与线程池聊天室
linux·服务器·网络·udp·vr
机器学习之心1 天前
基于变量相关图与残差学习的 GCN 多变量回归方法——混凝土 28 天抗压强度预测
学习·回归·gcn
我不会插花弄玉1 天前
6.传输层协议UDP【由浅入深-网络】
网络·网络协议·udp
Rabitebla1 天前
【Linux】进程控制(十二) 自定义 Shell(二):内建命令与进程工作目录管理
linux·c++·笔记·学习·bash