基于udp的局域网聊天系统。内容摘要:
用时序图 客户 /服务器程序的介绍 客户机 /服务器 [16]模型也是一种网络模型,但与其他的模型不同,它并不是定义了网络的层次结构,而是描述了一种网络程序运行的方式。 客户及 /服务器模型将网络应用程序分为客户和服务器两部分。 客户方对服务器方发送信息请求,服务器方对其做出相应回答,提供服务。 在 TCP/IP 网络应用中,多数网络应用程序是使用客户 /服务器模型设计的。 服务程序通常在一个众所周知的地址监听对服务的请求,也就是说,服务进程一直处于休眠 状态,直到一个客户程序提出了请求信息。 此时,服务程序被 惊醒 并且为客户提供服务,对客户的请求作出适当的反应。 虽然基于连接的服务是设计客户 /服务器应用程序的标准,但有些服务也是可以通过数据报 Socket 提供的。 [5] 青岛理工大学毕业设计(论文) 13 通常,网络应用程序包含两个独立的应用程序:客户程序和服务器程序。 但是,也可以设计同时完成这两种功能的程序,例如,一些服务器程序如果不能完成一个服务请求时,它将转而充当客户程序,向其它服务器程序请求信息。 这方面的一个典型例子就是提供 Inter 从域名到 IP 地址映射服务的 DNS 服务器。 [6] 开发环境的选择 根据总体设计,为使系统发挥最大的性能,同时也为了使系统具有较好的性能和高可移植性,选择好的工具将十分重要。 系统开发工具的选择 本系统的可视化开发选择环境选择了 Visual C++ [4], 我们通常所说的Visual C++实际上是一个完善的、非常强大的 C++程序开发环境,它的名字是 Microsoft Developer Studio。 二者之间的细小差别并不重要,通常这两个术语可以互换。 但如果你不围绕 Developer Studio 来进行学习,就 不能有效地使用Visual C++( Developer Studio 听起来很像 Visual Studio , 但它们之间没有关系)。 它包含: C++编译器、调试器、应用程序框架生成器、项目管理器、设计和实现菜单等资源的编辑器等。 数据库系统的选择 要建立一个以数据库为基础的 C/S 聊天 应用系统,其开发主要包括后台数据库的建立和维护及 客户端 的设计实现三个方面。 对于前者要求建立起数据一致性和完整性强、数据安全性好的数据库。 ( 1) 服务器 数据库 系统 的选择 MySQL 是一个小型关系型数据库管理系统 [14],开 发者为瑞典 MySQLAB 公司, MySQL被广泛地应用在 Inter 上的中小型网站中。 由于其体积小、速度快、青岛理工大学毕业设计(论文) 14 总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了 MySQL 作为网站数据库。 本系统选择了 MySQL 数据库管理系统,是因为 MySQL 数据库管理系统在针对轻量级开发的时候,会体现出它易用灵活的特点,提供了可靠的安全性,又能保存较多的信息量。 较之 SQL Server 数据库管理系统有着更好的移植性,适合跨平台开发和应用。 [7] ( 2) 客户端 数据库 系统 的选择 Berkeley DB 是由美国 Sleepycat Software 公司开发的一套开放源码的嵌入式数据库的程序库( database library),它为应用程序提供可伸缩的、高性能的、有事务保护功能的数据管理服务。 Berkeley DB 为数据的存取和管理提供了一组简洁的函数调用 API 接口。 客户端之所以选择 Berkeley DB 是因为客户端需要对好友资料及其聊天记录进行管理,而 Berkeley DB 具有的主要特点正符合各方面的要求。 它是一个经典的 Clibrary 模式的 toolkit,为程序员提供广泛丰富的函数集,是为应 用程序开发者提供工业级强度的数据库服务而设计的。 其主要特点如下: (1) 嵌入式( Embedded):它直接链接到应用程序中,与应用程序运行于同样的地址空间中,因此,无论是在网络上不同计算机之间还是在同一台计算机的不同进程之间,数据库操作并不要求进程间通讯。 (2) 轻便灵活( Portable):它可以运行于几乎所有的 UNIX 和 Linux 系统及其变种系统、 Windows 操作系统以及多种嵌入式实时操作系统之下。 一旦 Berkeley DB被链接到应用程序中,终端用户一般根本感觉不到有一个数据库系统存在。 (3) 可伸缩( Scalable): Database library 本身是很精简的(少于 300KB 的文本空间),但它能够管理规模高达 256TB 的数据库。 它支持高并发度,成千上万个用户可同时操纵同一个数据库。 青岛理工大学毕业设计(论文) 15 技术选取及搭配 本聊天系统将采用 C/S ( Client/Server) 结构,即客户机和服务器结构。 通过 C/S 结构可以充分利用两端硬件环境的优势,将任务合理分配到 Client 端和Server 端来实现,降低了系统的通讯开销,传统的两层客户 /服务器模式比较适合于小规模、用户较少、单一数据库且在安全、快速的网络环境下 (例如局域网 )运行 [6]。 其特点如下 : ( 1)采用 Intra 技术,适用于局域网环境,可连接的用户数有限,当用户数量增多时,性能会明显下降。 ( 2)每个客户端都要安装应用程序,部署复杂。 ( 3)代码可重用性差。 ( 4) 开发费用较低,开发周期较短。 数据库的设计 根据上述的原理,欲实现权限管理,必须设计好数据库,根据需求分析的要求,现设计数据库如下: ( 1)用户基本信息表( basic_tbl):存储用户的基本信息。 序号 字段名 数据类型 长度 允许为空 是否主键 说明 1 uin Int 10 否 是 用户 id 2 passwd Char 16 否 否 用户密码 3 pic TinyInt 3 否 否 头像索引 4 nick Char 16 是 否 用户昵称 5 age TinyInt 3 是 否 年龄 6 gender TinyInt 3 是 否 性别 7 country Char 16 是 否 国家 8 province Char 16 是 否 省份 9 city Char 20 是 否 城市 青岛理工大学毕业设计(论文) 16 10 Char 30 是 否 Email 表 ( basic_tbl) ( 2) 用户扩展信息表( ext_tbl):存储用户的扩展信息。 序号 字段名 数据类型 长度 允许为空 是否为主键 说明 1 uin Int 10 否 是 用户 id 2 address Char 64 是 否 地址 3 zipcode Char 16 是 否 邮编 4 tel Char 32 是 否 电话 5 name Char 32 是 否 姓名 6 blood TinyInt 3 是 否 血型 7 college Char 64 是 否 大 学 8 profession Char 16 是 否 职业 9 homepage Char 64 是 否 个人主页 10 intro TinyText 是 否 自我介绍 表 用户扩展信息表( ext_tbl) ( 3) 好友关系表( friend_tbl):存储用户之间关系。 序号 字段名 数据类型 长度 允许为空 是否为主键 说明 1 uin1 Int 10 否 否 用户 1 2 uin2 Int 10 否 否 用户 2 表 好友关系表( friend_tbl) 青岛理工大学毕业设计(论文) 17 ( 4)离线 消息转发表( message_tbl):存储离线消息。 序号 字段名 数据类型 长度 允许为空 是否为主键 说明 1 dst Int 10 否 否 接收 id 2 src Int 10 否 否 发送 id 3 type TinyInt 3 否 否 消息类型 4 time Int 10 否 否 发送时间 5 msg TinyText 是 否 消息内容 表 离线消息转发表( message_tbl) 青岛理工大学毕业设计(论文) 18 第 4 章 系统详细设计及实现 采用客户端 —— 服务器模型 ,使用封装的 UdpSession 类进行实现 底层通讯,底层利用 UDP 数据报协议进行通讯,这样,便于客户端之间的直接通讯,也可以高效的传送消息。 因为使用 UDP 协议进行通讯,所以要自己控制其可靠性。 每发送一个数据,接受方接受到数据后,会发回一个响应信息,发送方在一个超时时间内,收到响应信息,就表示发送数据成功,若没有收到,就表示发送失败,会按用户指定的次数 N,重试 N次,如果 N 次都失败,就返回发送数据失败。 当然,发回来的确认信息也可能丢失,但确认信息很短,相对来说,丢失的机率会小一些。 为了保存用户信息和好友信息及一些相关数据,服务器使用到数据库技术。 服务 器的数据库采用的是 MySQL 数据库,服务器访问数据库,用的是封装在UdpSession 中的相应方法,因为,对数据库的操作简单,服务器端为后台运行,着重的是功能和稳定性,不需繁琐的界面,所以界面的设计上只提供了简单的日志显示列表和服务器运行控制工具栏。 而对数据库的操作上,基本上都是对表的简单操作,所以使用 Sql 语句直接访问数据库,已经足够满足要求了。 服务端运行后,开启服务,则服务器开始侦听用户请求,如有信息发送过来,首先,发送回确认信息,然后,处理接收到的数据。 按照接受 到数据的类别,进行相应的处理,如有需要,会向用户发送处理的结果,或成功或失败的消息,处理结束后,关闭与客户端的连接。 这样,可以实时接受每个用户的请求,不会因为处理一个用户的请求,而忽略了其它用户。 服务器端主要是为用户存储必要的信息,协调用户之间的通讯,服务器端的设计,主要在功能上面。 服务器端的设计和底层通讯的方法,将是服务器端的重青岛理工大学毕业设计(论文) 19 点。 服务器端用户界面如图 所示。 图 服务器端用户界面 服务器端的构成 类名称 说明 CIcqServerApp 应 用程序类 CIcqServerDlg 主界面类 CAboutDlg 关于对话框类 CServerLog 服务器日志类,用于显示,保存日志 UdpSession 服务器 UDP 通讯类,为服务器端核心部分 青岛理工大学毕业设计(论文) 20 UdpInPacket UPD 接收封包类 UdpOutPacket UPD 发送封包类 UDP_HEADER UPD 包头结构体 SessionHash HASH 类 IcqPacket 数据包类 IcqList 双向链表类 IcqListItem 链表节点类 BROADCAST_MSG 广播 消息结构体 服务器端的主要功能实现 UdpSession 类为服务器端的核心部分,负责管理数据和客户端通信 [8],其声明为: class UdpSession { friend class SessionHash。 public: UdpSession()。 ~UdpSession()。 接收数据 bool onReceive(UdpInPacket amp。 )。 初始化连接 static bool initialize()。 销毁并且释放资源 static void cleanUp()。 接收数据 static bool onReceive()。 检查发送数据的队列 static time_t checkSendQueue()。 检查连接是否还存活 static time_t checkKeepAlive()。 青岛理工大学毕业设计(论文) 21 发送消息 static inline void sendMessage(uint8 type, uint32 dst, uint32 src, UdpSession *dstSession, time_t when, const char *text)。 广播消息 static void broadcastMessages()。 private: 直接发送 UPD数据包 void sendDirect(UdpOutPacket *p)。 创建数据包 void createPacket(UdpOutPacket amp。 out, uint16 cmd, uint16 ackSeq)。 UdpOutPacket *createPacket(uint16 cmd, uint16 ackSeq = 0)。 发送数据包 voi。基于udp的局域网聊天系统。
相关推荐
ont = new Font(宋体 , , 14)。 (font)。 (15, 110, 450, 300)。 (txa)。 but1=new JButton(保存聊天记录 )。 (new ActionListener() { public void actionPerformed(ActionEvent e) { try { String fileName = (输入保存的文件名及所在路径 )
带动齿圈和输出轴朝顺时针方向转动,根据特性方程组分析可知其传动比为 11 i4=α 1/( 1+α 1)。 由于其值小于 1,所以 4 档为超速档。 倒档:倒档时,倒档及直接档离合器 C2和低档及倒档制动器 B2同时工作,使输入轴同前太阳轮连接,同时低档及倒档制动器 B2 产生制动,将行星架固定。 发动机动力经输入轴传给前太阳轮,使前太阳轮朝顺时针方向转动,并带动长行星轮朝逆时针方向转动。
轴,常在其偏重的一侧平衡重或曲柄上钻去一部分质量,以达到平衡的要求。 江苏技术师范学院 毕业 设计说明书(论文) 第 14 页 共 47 页 曲柄它包括飞轮端,连杆轴颈,曲柄块,主轴颈,和水泵端。 下面介绍的绘图过程也是按照以上的结构来绘制的。 1) 选择圆柱按钮,绘制一个直径为 43,高度为 7的圆柱 1如图 31所示。 图 31圆柱 1 2)再创建一个圆锥,选择圆锥按钮
放大器同向端,构成常规的电压反馈,即电压外环:由电阻 R。 上检测得到的电流反馈信号 U。 和误差放大器的输出 us分别加至 P州比较器同向端和反向端,构成了电流内环。 PWM比较器输出加至触发器的 R端,时钟振荡器从 S端向锁存器输出一系列恒定频率的时钟信号。 当功率管导通时,随着电流的增大电流检测信号 us也同时增大,直到同 U。 电压相等时 PWM比较器输出高电平,使锁存器输出转为低电平
TMS320VC5402: TMS320VC5402 是 公司的定点数字信号处理芯片,是一种特殊结构的微处理器,为了达到快速进行数字信号处理的目的,采用程序与数据分开的总线结构,流水线操作,单周期完成乘法的硬件乘法器以及一套适合数字信号处理的指令集. 2. 3 系统设计方案: 本设计采用 TI公司的 DSP芯片 TMS320VC5402 设计了 DSP一 5402开发系统,利用该系统完成频谱
如图 1所示 ,AIC23有两个数字接口 ,其一是由 /CS,SDIN,SCLK和 MODE构成的数字控制接口 ,通过它将芯片 的控制字写入 AIC23。 从而控制 AIC23的功能。 另一组是由LRCIN,DIN,LROUT,DOUT和 BLCK组成的数字音频接口 ,AIC23的数字音频信号接口从这个接口接收或发出。 图 1 AIC23结构图 在模拟信号接口方面 ,AIC23有 4组 : 由