day2网络编程项目的框架
基于终端的
UDP云聊天系统
-
- 开发环境
Linux 系统+GCC+UDP+makefile+sqlite3
-
- 功能描述
通过 UDP 网络使服务器与客户端进行通信吗,从而实现云聊天。
-
-
- Sqlite数据库
-
用户在加入聊天室前,需要先进行用户登录或注册操作,并将注册的用户信息:用户ID,用户账号,用户密码。使用数据库进行统一存储。(使用如下结构体类型进行用户信息的注册)
typedef struct user{
int id;
char account[12];
char password[12];
}usr_t;
-
-
- 客户端功能描述
-
客户端运行后,先出现登陆界面,进行云聊天系统的登录或注册操作。登录成功后选择是否与服务端进行连接,连接后把账号信息发送给服务端,服务端验证后,把登录结果通知其他客户端。(客户端流程图如图1-1所示)
通过云聊天登录后用户可以完成以下操作:
- 进入聊天室,与其他成员进行聊天。
- 向服务端上传文件
- 从服务端获取文件
- 查看以往的聊天记录
- 退出聊天系统
客户端流程图 图1-1
-
-
- 服务端功能描述
-
服务端启动后,等待客户端链接。完成以下操作(服务端流程图如图1-2所示)
- 接收用户的登陆
- 接收用户需要访问的信息
- 保存用户上传文件
- 将某个用户发送的消息传递给其他用户
客户端与服务器基于 UDP 链接。服务器通过链表记录保存用户信息。
服务端流程图 图1-2
-
-
- Sock 编程
-
启动服务端程序,监听端口,等待客户端连接。完成客户端于服务端简单的 UDP 连接。使用 I/O 复用机制完成客户端与服务端之间的一对多的连接。服务端记录每个客户端的基本信息:每个客户端的 IP、端口等基本信息。使用链表记录保存这些信息。
-
-
- 数据包协议
-
客户端使用 UDP 连接服务端后,发送接受数据使用数据封包。封包格式如下:协议版本,数据包类型,数据包的内容。
协议版本:发送端填充自己的该数据包的版本信息,服务端接受数据包后,查看该版本是否是自己能识别的版本。是则进行解析,否则作为非法数据包(一般丢弃)。
数据包类型:发送端根据自己发送的数据包里面的数据内容的不同填充不同的类型。如:如果数据包的数据信息是登录信息,数据类型为整型 1。如果是断开连接的信息则数据类型为整型 2。这样接收端接受到数据之后就可以根据数据类型的值,对数据做不同的处理数据包内容:要发送的数据。
数据包发送者:在发送数据前,在数据前增加数据包头。数据包头包含以上的包头信息。
封包可以采用数据结构:
typedef struct message{
int type;//数据信息
int id;//用户 ID
char text[128];//消息正文
}msg_t;
数据包接受端:接受到数据后,分成两次读取一个数据包,第一次读取首先读取一个数据包头长度,然后根据数据包头中的数据长度读取整个数据包。这样一个一个的数据包就分别被读取出来。
数据包协议总结:协议是数据的收发端之间一种约定要好的一种规定。发送者按照该格式发送,接受者按照该格式进行解析。
-
-
- 聊天成员数据管理
-
服务端接收所有客户端的信息,将所有加入聊天室的成员使用链表统一管理。(用户信息:用户ID,用户端口号)
聊天信息:用户名,聊天信息
数据包内容:要发送的数据。
服务端通过如下结构体类型创建结点,对用户信息进行存储。
typedef struct node{
struct sockaddr_in caddr;
struct node *next;
int id;
int len;
}node_t;
-
-
- Makefile多文件编译
-
通过使用makefile多文件编译简化了编译流程。每次只需要执行make即可完成编译,不需要把全部的源文件都重新编译,优化了编译流程。
如果源文件发生修改,Makefile会检查文件的时间戳,如果有文件时间戳更新(该文件就会重新生成),只需要重新编译发生修改的源文件即可,节省了编译时间。
相关文章:
day2网络编程项目的框架
基于终端的 UDP云聊天系统 开发环境 Linux 系统GCCUDPmakefilesqlite3 功能描述 通过 UDP 网络使服务器与客户端进行通信吗,从而实现云聊天。 Sqlite数据库 用户在加入聊天室前,需要先进行用户登录或注册操作,并将注册的用户信息…...
C++和OpenGL实现3D游戏编程【连载13】——多重纹理混合详解
🔥C++和OpenGL实现3D游戏编程【目录】 1、本节要实现的内容 前面说过纹理贴图能够大幅提升游戏画面质量,但纹理贴图是没有叠加的。在一些游戏场景中,要求将非常不同的多个纹理(如泥泞的褐色地面、绿草植密布的地面、碎石遍布的地面)叠加(混合)起来显示,实现纹理间能够…...
探索云计算中的 Serverless 架构:未来的计算范式?
目录 引言 一、Serverless架构概览 二、Serverless 架构的优势 三、Serverless架构的挑战 四、Serverless架构的未来展望 五、结论 引言 在当今快速发展的 IT 行业中,云计算无疑占据了举足轻重的地位。随着技术的不断演进,云计算的一个新兴分支——…...
爬虫及数据可视化——运用Hadoop和MongoDB数据进行分析
作品详情 运用Hadoop和MongoDB对得分能力数据进行分析; 运用python进行机器学习的模型调理,利用Pytorch框架对爬取的评论进行情感分析预测; 利用python和MySQL对网站的数据进行爬取、数据清洗及可视化。...
扩散引导语言建模(DGLM):一种可控且高效的AI对齐方法
随着大型语言模型(LLMs)的迅速普及,如何有效地引导它们生成安全、适合特定应用和目标受众的内容成为一个关键挑战。例如,我们可能希望语言模型在与幼儿园孩子互动时使用不同的语言,或在撰写喜剧小品、提供法律支持或总结新闻文章时采用不同的风格。 目前,最成功的LLM范式是训练…...
LeetCode hot100---数组及矩阵专题(C++语言)
1、最大子数组和 (1)题目描述以及输入输出 (1)题目描述: 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 (2)输入输出描述: 输入&#…...
LabVIEW提高开发效率技巧----快速实现原型和测试
在LabVIEW开发中,DAQ助手(DAQ Assistant)和Express VI为快速构建原型和测试功能提供了极大的便利,特别适合于简单系统的开发和早期验证阶段。 DAQ助手:是一种可视化配置工具,通过图形界面轻松设置和管理数据…...
大论文记录
基础知识回顾 1.强化学习(Agent、Environment) 在 RL 中,代理通过不断与环境交互、以试错的方式进行学习,在不确定性下做出顺序决策,并在探索(新领域)和开发(使用从经验中学到的知识ÿ…...
蘑菇分类检测数据集 21类蘑菇 8800张 带标注 voc yolo
蘑菇分类检测数据集 21类蘑菇 8800张 带标注 v 蘑菇分类检测数据集 21类蘑菇 8800张 带标注 voc yolo 蘑菇分类检测数据集介绍 数据集名称 蘑菇分类检测数据集 (Mushroom Classification and Detection Dataset) 数据集概述 该数据集专为训练和评估基于YOLO系列目标检测模型…...
dockerhub 镜像拉取超时的解决方法
在几个月前,因为一些原因,导致 dockerhub 官网上面的镜像拉取超时,目前可以通过修改仓库地址,通过 daocloud 拉取 public-image-mirror 方式一 源仓库替换仓库cr.l5d.iol5d.m.daocloud.iodocker.elastic.coelastic.m.daocloud.io…...
私家车开车回家过节会发生什么事情
自驾旅行或者是自驾车回家过节路程太远。长途奔袭的私家车损耗很大。新能源汽车开始涉足电力系统和燃电混动的能源供应过渡方式。汽车在路途中出现零件故障。计划的出发日程天气原因。台风是否会提醒和注意。汽车的油站供应链和电力充电桩的漫长充电过程。高速公路的收费站和不…...
正则表达式的使用示例--Everything文件检索批量重命名工具
一、引言 Everything是一款非常实用的文件搜索工具,它可以帮助您快速定位并查找计算机中的文件和文件夹。Everything搜索文件资料之神速,有使用过的朋友们都深有体会,相对于Windows自带的搜索功能,使用Everything,可以…...
centos环境安装JDK详细教程
centos环境安装JDK详细教程 一、前期准备二、JDK安装2.1 rpm方式安装JDK2.2 zip方式安装JDK2.3 yum方式安装JDK 本文主要说明CentOS下JDK的安装过程。JDK的安装有三种方式,用户可根据实际情况选择: 一、前期准备 查看服务器操作系统型号,执…...
Spring Cloud全解析:服务调用之OpenFeign集成OkHttp
文章目录 OpenFeign集成OkHttp添加依赖配置连接池yml配置 OpenFeign集成OkHttp OpenFeign本质是HTTP来进行服务调用的,也就是需要集成一个Http客户端。 使用的是Client接口来进行请求的 public interface Client {// request是封装的请求方式、参数、返回值类型/…...
前端算法合集-1(含面试题)
(这是我面试一家中厂公司的二面算法题) 数组去重并按出现次数排序 题目描述: 给定一个包含重复元素的数组,请你编写一个函数对数组进行去重,并按元素出现的次数从高到低排序。如果次数相同,则按元素值从小到大排序。 let arr [2, 11,10, 1…...
影刀---如何进行自动化操作
本文不是广告,没有人给我宣传费,只是单纯的觉得这个软件很好用 感谢大家的多多支持哦 本文 1.基本概念与操作(非标准下拉框和上传下载)非标准对话框的操作上传对话框、下载的对话框、提示的对话框 2.综合案例3.找不到元素怎么办&a…...
146. LRU 缓存【 力扣(LeetCode) 】
零、原题链接 146. LRU 缓存 一、题目描述 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中ÿ…...
【算法】链表:92.反转链表(medium)+双指针
系列专栏 《分治》 《模拟》 《Linux》 目录 1、题目链接 2、题目介绍 3、解法 (双指针) 4、代码 是 206. 反转链表 - 力扣(LeetCode)的类型题,且难度提升,可以先完成206,然后参照206的…...
Command | Ubuntu 个别实用命令记录(新建用户、查看网速等)
1. 实用命令 1.1 系统相关 1.1.1 查看系统、用户信息等 查看当前系统硬件架构 uname -m注:mac 上也能用 查看当前系统的操作系统及版本 cat /etc/os-release | grep "PRETTY_NAME"查看当前系统单个cpu的可用核心数 cat /proc/cpuinfo | grep "…...
云服务器部署k8s需要什么配置?
云服务器部署k8s需要什么配置?云服务器部署K8s需要至少2核CPU、4GB内存、50GBSSD存储的主节点用于管理集群,工作节点建议至少2核CPU、2GB内存、20GBSSD。还需安装Docker,选择兼容的Kubernetes版本,配置网络插件,以及确…...
强化学习反噬:模型为骗奖励毁掉生产环境
从游戏作弊到生产事故在软件测试领域,我们习惯于与确定性缺陷作斗争:空指针、内存泄漏、逻辑错误。然而,随着人工智能,特别是强化学习(Reinforcement Learning, RL)模型被集成到生产系统(如自动…...
nginx实验练习
[rootserver ~]# setenforce 0 [rootserver ~]# systemctl stop firewalld[rootserver ~]# systemctl disable firewalld[rootserver ~]# yum install nginx -y[rootserver ~]# nginx -V # 查看版本,编译器、配置参数等信息[rootserver ~]# syste…...
4.1第一次练习作业
1.在root用户的主目录下创建两个目录分别为haha和hehe,复制hehe目录到haha目录并重命名为apple。[rootlocalhost ~]# mkdir {haha,hehe} [rootlocalhost ~]# cp -r hehe haha [rootlocalhost ~]# cd haha [rootlocalhost haha]# mv hehe apple2.将hehe目录移动到app…...
实战揭秘:抖音直播弹幕抓取的三大技术突破与完整实现方案
实战揭秘:抖音直播弹幕抓取的三大技术突破与完整实现方案 【免费下载链接】DouyinLiveWebFetcher 抖音直播间网页版的弹幕数据抓取(2025最新版本) 项目地址: https://gitcode.com/gh_mirrors/do/DouyinLiveWebFetcher 在直播电商蓬勃发…...
1-1 从零实现邻接矩阵:构建无向图的核心步骤与实战解析
1. 邻接矩阵与无向图:从概念到代码的桥梁 第一次接触图论时,我完全被那些抽象的概念搞晕了。直到有一天,导师在黑板上画了个简单的社交网络图:"你看,每个人是一个点,好友关系是连线,这不就…...
WebPlotDigitizer完全指南:从图表图像提取数据的终极解决方案
WebPlotDigitizer完全指南:从图表图像提取数据的终极解决方案 【免费下载链接】WebPlotDigitizer Computer vision assisted tool to extract numerical data from plot images. 项目地址: https://gitcode.com/gh_mirrors/we/WebPlotDigitizer 你是否曾经面…...
红蓝对抗深度解析:从技术体系到落地实践,企业安全真正的实战课
红蓝对抗深度解析:从技术体系到落地实践,企业安全真正的实战课 在数字化攻防进入 “实战对抗” 时代的今天,红蓝对抗已成为企业检验安全防御体系、提升应急响应能力的核心手段。不同于传统的漏洞扫描和合规检查,红蓝对抗以 “高仿…...
告别鼠标!用Vim打造你的极速编程工作流(含常用脚本编辑配置)
用Vim打造无鼠标编程工作流:从入门到精通的完整指南 作为一名开发者,你是否厌倦了在键盘和鼠标之间来回切换的低效操作?Vim这款诞生于1991年的文本编辑器,凭借其独特的模态编辑理念和全键盘操作方式,至今仍是提升编程…...
基础语法篇总结——从入门到精通
基础语法篇总结——从入门到精通 系列专栏:Python 100天从新手到大师 当前进度:Day 01-30 / 100 阅读时长:8 分钟 难度等级:⭐⭐ 一、本篇回顾 基础语法篇共 30 篇文章,涵盖了 Python 编程的核心基础: 知识体系 基础语法篇 (30 篇) ├── 基础入门 (8 篇) │ ├──…...
10个高效技巧解决RVC变声器常见故障
10个高效技巧解决RVC变声器常见故障 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Conversion-WebUI Retrieval-bas…...
