day2网络编程项目的框架

news/2024/10/4 15:28:47 标签: 网络

基于终端的

UDP云聊天系统

    1. 开发环境

Linux 系统+GCC+UDP+makefile+sqlite3

    1. 功能描述

通过 UDP 网络使服务器与客户端进行通信吗,从而实现云聊天。

      1. Sqlite数据库

用户在加入聊天室前,需要先进行用户登录或注册操作,并将注册的用户信息:用户ID,用户账号,用户密码。使用数据库进行统一存储。(使用如下结构体类型进行用户信息的注册)

typedef struct user{

    int id;

    char account[12];

    char password[12];

}usr_t;

      1. 客户端功能描述

客户端运行后,先出现登陆界面,进行云聊天系统的登录或注册操作。登录成功后选择是否与服务端进行连接,连接后把账号信息发送给服务端,服务端验证后,把登录结果通知其他客户端。(客户端流程图如图1-1所示)

通过云聊天登录后用户可以完成以下操作:

  1. 进入聊天室,与其他成员进行聊天。
  2. 向服务端上传文件
  3. 从服务端获取文件
  4. 查看以往的聊天记录
  5. 退出聊天系统

客户端流程图 图1-1

      1. 服务端功能描述

服务端启动后,等待客户端链接。完成以下操作(服务端流程图如图1-2所示)

  1. 接收用户的登陆
  2. 接收用户需要访问的信息
  3. 保存用户上传文件
  4. 将某个用户发送的消息传递给其他用户

客户端与服务器基于 UDP 链接。服务器通过链表记录保存用户信息。

服务端流程图 图1-2

      1. Sock 编程

启动服务端程序,监听端口,等待客户端连接。完成客户端于服务端简单的 UDP 连接。使用 I/O 复用机制完成客户端与服务端之间的一对多的连接。服务端记录每个客户端的基本信息:每个客户端的 IP、端口等基本信息。使用链表记录保存这些信息。

      1. 数据包协议

客户端使用 UDP 连接服务端后,发送接受数据使用数据封包。封包格式如下:协议版本,数据包类型,数据包的内容。

协议版本:发送端填充自己的该数据包的版本信息,服务端接受数据包后,查看该版本是否是自己能识别的版本。是则进行解析,否则作为非法数据包(一般丢弃)。

数据包类型:发送端根据自己发送的数据包里面的数据内容的不同填充不同的类型。如:如果数据包的数据信息是登录信息,数据类型为整型 1。如果是断开连接的信息则数据类型为整型 2。这样接收端接受到数据之后就可以根据数据类型的值,对数据做不同的处理数据包内容:要发送的数据。

数据包发送者:在发送数据前,在数据前增加数据包头。数据包头包含以上的包头信息。

封包可以采用数据结构:

typedef struct message{

int type;//数据信息

int id;//用户 ID

char text[128];//消息正文

}msg_t;

数据包接受端:接受到数据后,分成两次读取一个数据包,第一次读取首先读取一个数据包头长度,然后根据数据包头中的数据长度读取整个数据包。这样一个一个的数据包就分别被读取出来。

数据包协议总结:协议是数据的收发端之间一种约定要好的一种规定。发送者按照该格式发送,接受者按照该格式进行解析。

      1. 聊天成员数据管理

服务端接收所有客户端的信息,将所有加入聊天室的成员使用链表统一管理。(用户信息:用户ID,用户端口号)

聊天信息:用户名,聊天信息

数据包内容:要发送的数据。

服务端通过如下结构体类型创建结点,对用户信息进行存储。

typedef struct node{

    struct sockaddr_in caddr;

    struct node *next;

    int id;

    int len;

}node_t;     

      1. Makefile多文件编译

通过使用makefile多文件编译简化了编译流程。每次只需要执行make即可完成编译,不需要把全部的源文件都重新编译,优化了编译流程。

如果源文件发生修改,Makefile会检查文件的时间戳,如果有文件时间戳更新(该文件就会重新生成),只需要重新编译发生修改的源文件即可,节省了编译时间。

                 


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

相关文章

【优选算法】(第二十篇)

目录 提莫攻击(easy) 题目解析 讲解算法原理 编写代码 N字形变换(medium) 题目解析 讲解算法原理 编写代码 提莫攻击(easy) 题目解析 1.题目链接:. - 力扣(LeetCode&#x…

程序猿成长之路之设计模式篇——设计模式简介

无论是对于代码质量还是代码可维护性、可扩展性,使用合适的设计模式都能够起到促进提升的作用,此外在软考的软件工程师、系统架构师职称考试中,设计模式也是必考的一块内容,因此我打算开拓一个新的专栏简单介绍一下设计模式&#…

查缺补漏----I/O中断处理过程

中断优先级包括响应优先级和处理优先级,响应优先级由硬件线路或查询程序的查询顺序决定,不可动态改变。处理优先级可利用中断屏蔽技术动态调整,以实现多重中断。下面来看他们如何运用在中断处理过程中: 中断控制器位于CPU和外设之…

27 基于51单片机的方向盘模拟系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52单片机,采用两个MPX4115压力传感器作为两路压力到位开关电路, 采用滑动变阻器连接数模转换器模拟重力加速度传感器电路; 一个按键控制LED灯的点亮与…

取反与while错误,while卡死,非成功不结束思想总结

一般我们写函数配置硬件,都需要返回它的成功与否。我们以成功为一,不成功为零,借助这两个变量,我们就可以设计一个死循环,让它不成功不结束的思想 while(1){if( open(&a…

ARM嵌入式学习--第一天

-ARM核介绍 -CPU核 CPU又叫中央处理器,其主要功能是进行算数运算和逻辑运算,内部结构大概可以分为控制单元,算术逻辑单元和储存单元等几个部分 -ARM核 工作模式: user mode:用户模式是用户程序的工作模式,他运行在操作…

防范.[support2022@cock.li].colony96勒索病毒:数据保护、恢复与安全意识提升

导言 在数字世界的暗流涌动中,.[support2022cock.li].colony96勒索病毒以其独特的智能监控技术和狡猾的传播策略,悄然成为网络安全领域的一颗“定时炸弹”。本文旨在深入剖析这一新型勒索病毒的运作机制,探索创新的数据恢复方法,…

数据仓库!企业决策的智慧引擎

数据仓库!企业决策的智慧引擎 前言数据仓库 前言 今数字化浪潮汹涌澎湃的时代,数据已然成为企业航行于市场海洋的罗盘,而数据仓库则是那承载罗盘的坚固船只。当我们深入探究数据仓库的世界,就仿佛打开了一扇通往企业智慧核心的大…