当前位置: 首页 > news >正文

嵌入式学习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 

相关文章:

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

题目:基于UDP实现直播间聊天的功能 需求: 软件划分为用户客户端和主播服务端两个软件client.c和server.c 用户客户端负责: 1.接收用户的昵称 2.接收用户输入的信息,能够将信息发送给服务端 3.接收服…...

Python:if条件判断语句

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 内容简介 比较运算符和关系运算符&#xff1a; 本文将介绍Python中常见的比较运算符&#xff0c;如 &#xff08;等于&#xff09;、! 和 <&…...

git 命令怎么回退到某个特定的 commit 并将其推送到远程仓库?

问题 不小心把提交的名称写错提交上远程仓库了&#xff0c;这里应该是 【029】的&#xff0c;这个时候我们想回到【028】这一个提交记录&#xff0c;然后再重新提交【029】到远程仓库&#xff0c;该怎么处理。 解决 1、首先我们找到【028】这条记录的提交 hash&#xff0c;右…...

Python中如何操作数据库?

Python中如何操作数据库&#xff1f; ​​​​​ 在Python中操作数据库通常涉及到使用数据库驱动程序或ORM&#xff08;对象关系映射&#xff09;库。下面是一些常见的步骤和工具&#xff0c;用于在Python中操作数据库&#xff1a; 1. 选择数据库和驱动程序 首先&#xff0c…...

【智能算法】蜻蜓算法(DA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.代码实现4.参考文献 1.背景 2016年&#xff0c;Mirjalili受到蜻蜓静态和动态集群行为启发&#xff0c;提出了蜻蜓算法(Dragonfly algorithm, DA)。 2.算法原理 2.1算法思想 蜻蜓集群有两种行为目的&#xff1a;狩猎&#xf…...

用A*算法求解八数码问题

用A*算法求解八数码问题 实现两种启发函数实现A*算法测试 实现两种启发函数 采取两种策略实现启发函数&#xff1a; 策略1&#xff1a;不在目标位置的数字个数策略2&#xff1a;曼哈顿距离&#xff08;将数字直接移动到对应位置的步数总数&#xff09; # 策略1: 不在目标位置…...

分布式之Ribbon使用以及原理

Ribbon使用以及原理 1、负载均衡的两种方式 服务器端负载均衡 传统的方式前端发送请求会到我们的的nginx上去&#xff0c;nginx作为反向代理&#xff0c;然后路由给后端的服务器&#xff0c;由于负载均衡算法是nginx提供的&#xff0c;而nginx是部署到服务器端的&#xff0c;所…...

android JNI float *转MutableList

data class Test(var data:MutableList<Float> )JNIEXPORT void JNICALL Java_NativeUtils_assignFloatArrayToHealth(JNIEnv *env, jclass clazz, jobject obj, jfloatArray cData) {jclass objClass env->GetObjectClass(obj);// 获取 Test类中的 data 属性jfieldI…...

chatgpt与人类有何不同?

ChatGPT和人类之间存在多个显著的差异。 首先&#xff0c;ChatGPT是一种基于人工智能技术的计算机程序&#xff0c;通过机器学习和自然语言处理等技术&#xff0c;从大量的数据中获取知识并生成语言输出。它主要依赖于算法和数据进行工作&#xff0c;能够迅速处理和检索信息&a…...

论文笔记:Evaluating the Performance of Large Language Models on GAOKAO Benchmark

1 论文思路 采用zero-shot prompting的方式&#xff0c;将试题转化为ChatGPT的输入 对于数学题&#xff0c;将公式转化为latex输入 主观题由专业教师打分 2 数据 2010~2022年&#xff0c;一共13年间的全国A卷和全国B卷 3 结论 3.1 不同模型的zeroshot 高考总分 3.2 各科主…...

MySQL 数据库查询与数据操作:使用 ORDER BY 排序和 DELETE 删除记录

使用 ORDER BY 进行排序 使用 ORDER BY 语句按升序或降序对结果进行排序。 ORDER BY 关键字默认按升序排序。要按降序排序结果&#xff0c;使用 DESC 关键字。 示例按名称按字母顺序排序结果&#xff1a; import mysql.connectormydb mysql.connector.connect(host"l…...

数据结构入门(3)2.链表接口实现

目录 前言 头文件 动态申请一个结点 单链表打印 单链表尾插 单链表的头插 单链表的尾删 单链表头删 单链表查找 单链表在pos位置之后插入x 单链表删除pos位置之后的值 在pos的前面插入 删除pos位置 销毁顺序表 前言 本文将介绍链表常见的功能的实现 头文件 #…...

vscode中解决驱动编写的时候static int __init chrdev_init()报错的问题

目录 错误出错原因解决方法 错误 在入口函数上&#xff0c;出现 expected a ; 这样的提示 出错原因 缺少了 __KERNEL __ 宏定义 解决方法 补上__KERNEL__宏定义 具体做法&#xff1a;在vscode中按下ctrlshiftp &#xff0c;输入&#xff1a;C/C:Edit Configurations&#xff0…...

fastgpt本地详细部署以及配置

目录 一、Docker部署1、docker安装2、docker启动3、添加用户到 docker 组:4、验证 Docker 安装:二、one_api 本地部署1、linux系统部署2、windows系统部署三、向量模型部署(m3e)四、chatglm2模型本地部署五、fastgpt模型本地部署1、下载配置文件2、文件配置--docker-compos…...

【故障分类】基于注意力机制的卷积神经网络结合双向长短记忆神经网络CNN-BiLSTM-attention实现数据分类附matlab代码

摘要&#xff1a; ntion机制加权 4. 加权后的特征进行分类 需求分析 本文旨在实现一个通用的数据分类模型&#xff0c;可应用于不同领域的数据分类任务。 设计方案 设计一个CNN网络结构&#xff0c;提取输入数据的特征 将特征序列输入到BiLSTM网络&#xff0c;进行时序建模…...

vue接入百度地图获取经纬度

通过城市名称和城市中心经纬度来获取当前所在地图&#xff0c;当前经纬度中心获取可以通过后端获取 静态文件包&#xff0c;替换baidu.html中的ak值&#xff0c;ak值通过百度地图官方网站申请 申请&#xff1a;百度地图API申请步骤 - 知乎 代码示例文件&#xff1a; 链接&a…...

交流负载箱的特点和优势有哪些?

交流负载箱广泛应用于电力系统、新能源、轨道交通、航空航天等领域。它具有以下特点和优势&#xff1a; 1. 灵活性高&#xff1a;交流负载箱可以根据实际需求&#xff0c;调整输出电流、电压、功率等参数&#xff0c;以满足不同场景下的测试需求。同时&#xff0c;它还可以实现…...

Java线程锁之Lock的使用

Lock 的使用 Lock 是java 1.5 中引入的线程同步工具&#xff0c;它主要用于多线程下共享资源的控制。本质上Lock 仅仅是一个接口&#xff0c; 可以通过显式定义同步锁对象来实现同步&#xff0c;能够提供比synchronized 更广泛的锁定操作&#xff0c;并支持多个相关的 Lock接…...

简站wordpress主题看上去差不多 实际大不一样

有人说简站wordpress主题&#xff0c;都差不多嘛。我表示无语。表面看上去是差不多的&#xff0c;实际的细节是不一样的。 下面以编号&#xff1a;JZP4431和编号&#xff1a;JZP4878这两个主题为例子来讲一下&#xff0c;简站wordpress主题&#xff0c;在细节方面的不一样之处…...

(完美方案)解决mfc140u.dll文件丢失问题,快速且有效的修复

唉&#xff0c;又是丢失了mfc140u.dll&#xff0c;这该怎么办呢&#xff1f;如果你的电脑突然找不到或丢失mfc140u.dll文件&#xff0c;那就真是太糟糕了。别担心&#xff0c;我分享给你一些干货&#xff0c;告诉你如何快速解决mfc140u.dll丢失的问题。 一.mfc140u.dll属性功能…...

go-mysql-server存储过程开发:10个最佳实践提升业务逻辑处理

go-mysql-server存储过程开发&#xff1a;10个最佳实践提升业务逻辑处理 【免费下载链接】go-mysql-server A MySQL-compatible relational database with a storage agnostic query engine. Implemented in Go. 项目地址: https://gitcode.com/gh_mirrors/go/go-mysql-serve…...

我用9个AI Agent,从0到1复刻了一个完整的Claude Code

起因4月初&#xff0c;Claude Code的源码泄露了。拿到源码之后通读了一遍&#xff0c;大概1,900个文件、512K行TypeScript代码。看完之后就有了一个想法&#xff1a;能不能用Go把它重写一遍&#xff1f;不是写个Demo玩玩&#xff0c;而是把所有功能都搬过来——CLI入口、LLM查询…...

保姆级教程:手把手教你为ROS机器人定制Rviz多目标点导航插件(基于move_base)

从零构建ROS机器人专属Rviz导航插件&#xff1a;多目标点顺序导航实战指南 当你的ROS机器人需要在复杂环境中执行多点位任务时&#xff0c;一个可靠的多目标点导航插件能极大提升工作效率。本文将带你深入理解Rviz插件机制&#xff0c;并手把手教你如何基于开源代码定制适配自己…...

内置“龙虾”的异地组网路由器!蒲公英X1 Pro重磅升级

蒲公英异地组网路由器X1 Pro重磅升级&#xff01;首款内置“龙虾”的路由器来了&#xff01;无需云服务器、无需额外电脑&#xff0c;在小巧的路由器里就能一键部署OrayClaw&#xff0c;拥有你的专属“龙虾”&#xff01;它不仅仅是个会聊天的AI&#xff0c;在支持随心搭配大模…...

STM32 FSMC DMA驱动LVGL刷新优化:从原理到3.5寸屏实战避坑

1. FSMC与DMA加速LVGL刷新的核心原理 第一次在STM32上跑LVGL时&#xff0c;最让我头疼的就是刷新卡顿问题。后来发现&#xff0c;传统的像素点逐行写入方式就像用吸管转移游泳池的水——效率实在太低。这里面的关键突破在于理解FSMC&#xff08;Flexible Static Memory Control…...

用40块钱的Luckfox Pico玩转无线图传:手把手教你用UDP+OpenCV把摄像头画面传到Ubuntu

40元Luckfox Pico打造无线图传系统&#xff1a;UDPOpenCV全链路实战指南 当一块比外卖还便宜的Linux开发板遇上计算机视觉&#xff0c;会碰撞出怎样的火花&#xff1f;这个周末项目将带你用40元的Luckfox Pico配合50元的摄像头模组&#xff0c;搭建一套完整的无线图像传输系统。…...

AI原生不是选修课:SITS2026标准下,为什么83%的企业在Q3前必须完成架构层重构?

第一章&#xff1a;企业AI原生转型&#xff1a;SITS2026实战攻略 2026奇点智能技术大会(https://ml-summit.org) 企业AI原生转型已从战略构想进入规模化落地阶段。SITS2026&#xff08;Smart Intelligent Transformation Summit 2026&#xff09;提出“三阶跃迁”实践框架&…...

AI编程实战:从零到一搭建全栈项目断

1. 核心概念 在 Antigravity 中&#xff0c;技能系统分为两层&#xff1a; Skills (全局库)&#xff1a;实际的代码、脚本和指南&#xff0c;存储在系统级目录&#xff08;如 ~/.gemini/antigravity/skills&#xff09;。它们是“能力”的本体。 Workflows (项目级)&#xff1a…...

【技术解析】BAN——双线性注意力网络在视觉问答中的高效应用与优化

1. 双线性注意力网络&#xff08;BAN&#xff09;为何能成为视觉问答的利器 视觉问答&#xff08;VQA&#xff09;任务需要同时理解图像内容和自然语言问题&#xff0c;这对模型的跨模态交互能力提出了极高要求。传统协同注意力机制虽然能分别捕捉视觉和文本特征&#xff0c;但…...

为什么要做 GeoPipeAgent沉

指令替换 项目需求&#xff1a;将加法指令替换为减法 项目目录如下 /MyProject ├── CMakeLists.txt # CMake 配置文件 ├── build/ #构建目录 │ └── test.c #测试编译代码 └── mypass2.cpp # pass 项目代码 一&#xff0c;测试代码示例 test.c // test.c #includ…...