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

news/2024/5/18 11:52:28 标签: 学习, udp, tcp/ip

题目:基于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 


http://www.niftyadmin.cn/n/5413698.html

相关文章

OpenCV介绍

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,由Intel公司俄罗斯团队发起并参与和维护。它提供了丰富的图像处理和计算机视觉算法,广泛应用于工厂产品检测、医学成像、信息安全、用户界面、摄像机标定、…

✅ Windows11 系统 I 卡独显 A770 安装 深度学习 Pytorch 环境

📋 文献参考 这里非常感谢知乎上的 ‘丢丢’ 的[**Windows系统下英特尔独显Pytorch的历程**] 为我提供了一开始的 I 卡安装想法!但是文中并未介绍如何进行额外的环境变量操作问题,导致很多软件直接安装至系统盘,占用系统盘空间&am…

深入理解与应用Keepalive机制

目录 引言 一、VRRP协议 (一)VRRP概述 1.诞生背景 2.基本理论 (二)VRRP工作原理 (三)VRRP相关术语 二、keepalive基本理论 (一)基本性能 (二)实现原…

Python编写的计算跳过带有特定数字的车位数量小程序,并利用wxPython做成GUI界面打包成可执行文件(Part1)

1.概述 本文主要讲述利用Python来编写一个可以计算跳过带有特定数字的车位数量小程序。并且又利用第三方库wxPython做出GUI界面,打包成可执行文件。 现实中有这样的实际案例,某楼盘的地下车库的数量有2000多个车位,车位分成了5个分区,每个分区有400-500个车位数量不等。并且…

数据库-第六/七章 关系数据理论和数据库设计【期末复习|考研复习】

前言 总结整理不易,希望大家点赞收藏。 给大家整理了一下数据库系统概论中的重点概念,以供大家期末复习和考研复习的时候使用。 参考资料是王珊老师和萨师煊老师的数据库系统概论(第五版)。 文章目录 前言第六章 关系数据理论6.1 规范化6.2 范式6.3 规范…

获取C语言语句对应的汇编码和机器指令

借助IDE的调试功能 以CodeBlocks为例,先设置断点,然后点击红色三角形调试。 然后选择Debug➡ Debugging Windows➡Disassembly 就可以看到了 使用命令行 在工程文件中,一般可以找到一个.o文件。如果没有,可以先在program.c的目录下…

第5章 HSA内存模型

5.1 引言 在共享内存环境中,独立的控制线程可以竞相修改单个位置。为程序以可预测的方式运行,程序员必须用同步来控制这些竞争。 “内存一致性模型”或“内存模型”定义了并行代理之间通信的基本规则。当这些规则含糊不清地定义或者更糟的是完全不存在…

gitlab的CI/CD的Job作业

使用 stages 来定义包含作业组的阶段。stages 是为流水线全局定义的。在作业中使用 stage 来定义作业属于哪个阶段。 如果.gitlab-ci.yml文件中没有定义 stages,那么默认的流水线阶段是: buildtestdeploystages:- build- test- deploydemojob1:stage: buildtags: - localrun…