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

题目:基于UDP实现直播间聊天的功能
需求:
    软件划分为用户客户端和主播服务端两个软件client.c和server.c 

    用户客户端负责:
        1.接收用户的昵称
        2.接收用户输入的信息,能够将信息发送给服务端
        3.接收服务端回复的数据信息,并完成显示
    
    主播服务端负责:
        1.对所有加入直播间的用户的IP地址和端口实现管理(加入、退出)
        2.当有新的客户端加入时,能够向所有客户端提示:"欢迎 XXX 用户进入直播间"
        3.当有客户端退出时,能够向所有客户端提示:"XXX 离开直播间"
        4.能够实现客户端聊天内容的转发,当某个客户端发送聊天信息时,能够将该信息转给除了该用户之外聊天室内所有其余客户端用户
    
        实现服务端对用户的管理(1.查看当前直播间的在线人数 2.能够实现禁言、踢出直播间功能)

TCP通信:

TCP发端:
    socket 
    connect 
    send
    recv 
    close 

TCP收端:
    socket 
    bind 
    listen          监听
    accept          
    send 
    recv 
    close 

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.mzph.cn/news/727366.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

轻量脚本语言Lua的配置与c++调用

文章目录 lua配置下载运行lua命令lua脚本的执行C++调用lua环境配置错误和警告测试c++程序lua脚本结果Lua是一种功能强大且快速的编程语言,易于学习和使用,并且可以嵌入到应用程序中。 Lua被设计成一种轻量级的可嵌入脚本语言。它被用于各种各样的应用程序,从游戏到web应用程…

计算机考研❗️这些院校(含985)性价比巨高

✅厦门大学 (985) 不歧视双非,全靠实力,校园环境还贼美 ✅重庆大学 (985) 信息公开透明,复试抽签 ✅北京师范大学 (985) 不歧视本科出身,面试抽签答题。 ✅东南大学 (985) 保护第一志愿,复试抽签 ✅吉林大学 (…

安捷伦DSA90254A示波器 AgilentDSA90254A

产品简介: •高性能实验室 •2.5 GHz 带宽 •4 个模拟通道,每个通道的采样率为 20 GSa/s •每个通道的数据速率为 20 Mpts 至 1 Gpts •很低的本底噪声:100 mV/格时为 3.01 mVrms •DSA90000A 系列示波器是以 Infiniium DSO90000A 系列…

ChatGPT:人工智能的革命与未来

引言 随着人工智能技术的飞速发展,ChatGPT作为OpenAI推出的一款语言模型,已经引起了广泛的关注和讨论。它不仅改变了我们与机器交流的方式,还为众多行业的发展带来了革命性的影响。本文将深入探讨ChatGPT的技术原理、应用场景以及它对未来的…

JavaEE进阶(14)Linux基本使用和程序部署(博客系统部署)

接上次博客:JavaEE进阶(13)案例综合练习——博客系统-CSDN博客 目录 程序配置文件修改和打包 构建项目并打包 分平台配置 数据准备 上传jar包到云服务器并运行 开放端口号 验证程序 如何查看日志得到报错信息 常见问题 关于Linux基…

C++ STL——string容器

1,string基本概念 string是C风格的字符串,而string本质上是一个类 string类内部封装了很多成员方法 例如:查找find,拷贝copy,删除delete,替换replace,插入insert string管理char*所分配的内…

串的匹配算法——KMP算法

目录 一.特点 二.算法思想 三.公式证明 四.next数组及其练习 五.找规律计算next[k] 六.代码实现 一.特点 BF算法的特点是i回退,KMP算法的最大特点是i不回退,由于i不回退,所以KMP算法的时间复杂度是O(nm)。 二.算法思想 在匹配主串和子…

浅谈社会工程学攻击

一、前言 1.1 社会工程学起源 社会工程学是黑客米特尼克在《欺骗的艺术》中所提出,其初始目的是让全球的网民们能够懂得网络安全,提高警惕,防止没必要的个人损失。但在我国黑客集体中还在不断使用其手段欺骗无知网民制造违法行为,…

String类,StringBuilder类,StringBuffer类

前言 String类,StringBuilder类,StringBuffer类都是java提供的定义字符串的类,下面是三种字符串类的异同介绍 String类:String类表示的字符串是是常量,一旦创建内容和长度都无法修改 StringBuilder类:St…

6个维度分析实时渲染和Webgl技术异同

在日常交流中,对Webgl技术熟悉的合作伙伴,在初次了解实时渲染技术时,都会问二者之间的异同。目前很多要求B/S架构的项目,很多在用webgl技术路线,而且这个方案在行业里比较普,业主方对这个也比较熟悉&#x…

JAVA实现图像取模

JAVA对图像取模 就是图片变成点阵 原图 取模效果图 代码如下: public static void main(String[] args) throws IOException {try {// 读取图像文件BufferedImage image ImageIO.read(new File("C:/Users/xiaol/Desktop/img/0.jpg"));// 定义阈值&am…

冬去春来天气阴晴不定 美食拿捏味蕾安稳换季

俗话说“春打六九头”,3月虽然已经入春,但是天气依然是凉飕飕的 ,冬天春天的换季期,因为天气的变化,尤为痛苦。但是来到了换季期,天气也不总是那么稳定,随着气温的起伏,我们的食欲也…

Vue项目实战--空间论坛(1)

环境准备 安装好node.js,Vue后 添加插件 router---路由,多页面的应用 vuex---在多个组件之间维护同一个数据 添加依赖 bootstrap---美工 popperjs/core vue项目介绍 views-----对应vue文件,页面 router-----路由,页面,c…

《javascript高级程序设计》学习笔记 | 23.JSON

关注[前端小讴],阅读更多原创技术文章 JSON JSON 是 JS 对象简谱,是一种通用的数据格式和 JS 有相同的语法,但不属于 JS,很多语言都能解析和序列化 JSON 相关代码 → 语法 JSON 支持 3 种类型的值 简单值:字符串、…

leetCode刷题 4.寻找两个正序数组的中位数

目录 1. 思路 2. 解题方法 3. 复杂度 4. Code 题目: 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 示例 1: 输入&…

1分钟带你搞定Python函数分类

python语言中,函数可以分为内置函数、自定义函数、有参数函数、无参数函数、有名字函数和匿名函数。其中,内置函数可以直接使用,自定义函数需要根据需求定义。有参数函数在定义时需要指定参数,调用时传入参数。无参数函数在定义时…

python基础 — 进制转换

1、进制引导符号 在 Python 中,可以使用不同的前缀(引导符号)来表示不同的进制。 以下是各种进制的引导符号: 二进制(Binary):使用0b或0B作为前缀。例如:0b1010 表示二进制数 101…

SpringBoot 跨域配置

SpringBoot 跨域配置 添加配置文件 Configuration public class CorsConfig {private CorsConfiguration buildConfig() {CorsConfiguration corsConfiguration new CorsConfiguration();corsConfiguration.setAllowCredentials(true);// 设置访问源地址corsConfiguration.a…

git远程仓库使用

赋值这个地址clone 克隆之后 cd slam_oncloud/ git remote add chenxnew ssh://git192.168.3.40:1022/chenxiao/slam_oncloud.git 查看一下 linuxchenxiao:/media/linux/mydisk/cloud_slam/slam_oncloud$ git remote add chenxnew ssh://git192.168.3.40:1022/chenxiao/sla…

记录一次Dubbo远程调用的错误

情景:有一个生成PDF的接口中,如下: GET Path("/getPDF") public void getPDF(QueryParam("id") String id, Context HttpServletResponse response) {………… }之前实现的代码都写在了Controller里面,代码里…