基于嵌入式系统的聊天程序设计_第1页
基于嵌入式系统的聊天程序设计_第2页
基于嵌入式系统的聊天程序设计_第3页
基于嵌入式系统的聊天程序设计_第4页
基于嵌入式系统的聊天程序设计_第5页
免费预览已结束,剩余17页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计报告书课程设计报告书 设计名称 基于嵌入式系统的聊天程序设计 课程名称 嵌入式系统开发 摘要摘要 随着 IT 技术的日益发展 嵌入式设备的功能越来越强大 嵌入式设备决 不再只是充当一个小小的个人信息管理工具了 更重要的是可以上网浏览 收 发邮件 在线聊天等 然而就目前国内市场来说 并不是所有的嵌入式设备都 具备以上所有的功能 即使具备 也可能由于缺乏相应的服务而不能实现 但 可以预见 嵌入式设备发展的趋势和潮流就是计算 通信 网络 存储等功能 的融合 目前市场上大多数的嵌入式系统都是商业化产品 价格昂贵 因此在 开发过程中有必要使用一个模拟器 使得在 PC 上可以模拟一个嵌入式设备 在 Pc 机上可以方便的开发和测试程序 并且可以帮助工程师快速的进行分析和改 进 提高了工作效率和降低了项目的开发成本 在嵌入式操作系统的领域中 Linux 以其特有的魅力得到了众多开发商的亲睐 Linux 这些特性包括可以移植 到多个同结构的 CPU 和硬件平台上 有很好的稳定性以及各种性能的升级能力 嵌入式 linux 在电子行业的应用很广泛 学习嵌入式 linux 显得非常重要 这次课程设计的主要目的是检验上学期学习 linux 后的效果 通过基础题的代 码编写 熟悉 linux C 语言编程技巧 通过完成聊天程序的设计 熟悉 linux 底层编程 利用 QT 设计界面 缩短开发时间 关键字 关键字 嵌入式 linux 基础题 聊天程序 QT 一 引言 1 二 系统分析 2 2 1 开发背景 2 2 2 聊天程序的基本需求 2 2 3 需实现的主要功能 2 三 需求分析 3 3 1 QT 设计 3 3 1 1 客户端 QT 界面设计 4 3 2 服务器端和客户端的数据传输方式 4 3 3 服务器端功能设计 5 3 4 客户端功能设计 5 四 总体设计 5 4 1 总体功能 5 五 详细设计 6 5 1 功能分析和描述 6 5 2 客户端功能模块 6 5 2 1 连接服务器 6 5 2 2 发送消息功能 6 5 2 3 接收消息模块 7 5 3 服务器功能模块 8 六 代码实现 8 6 1 客户端代码 8 6 1 1 QT 构造和析构函数 8 6 1 2 创建套接字 10 6 1 3 创建线程 11 6 2 服务器端代码 11 七 功能的实现过程 13 八 总结 13 1 一 引言一 引言 随着 IT 信息 技术的飞速发展 特别是互联网的迅速普及 3C 计算机 通 讯 消费电子 合一的加速 数字化时代已经来临 嵌入式系统是数字化时代的 一大主流产品 世界各国在此领域开始了激烈竞争 以争取获得主导地位 嵌 入式系统是数字化产品的核心 为适应嵌入式分布处理结构和应用上网需求 面向 21 世纪的嵌入式系统要求配备标准的一种或多种网络通信接口 针对外部 联网要求 嵌入设备必需配有通信接口 相应需要 TCP IP 协议族软件支持 由于家用电器相互关联 如防盗报警 灯光能源控制 影视设备和信息终端交换 信息 及实验现场仪器的协调工作等要求 新一代嵌入式设备还需具备 IEEEl394 USB Bluetooth 或 Ir DA 通信接口 同时也需要提供相应的通信组 网协议软件和物理层驱动软件 为了支持应用软件的特定编程模式 如 Web 或 无线 Web 编程模式 还需要相应的浏览器 如 HTML WML 等 可以想象 如果 一个体积很小的嵌入式系统能够进行在线聊天 HrrP 通信 这将是会一件充满 意义的事情 但是现在大多数的嵌入式系统都是商业化产品 价格昂贵 所以嵌入式系 统 开发前期投入比较大 开发工具投入高 为了改变这种状况 有必要设计一个 模 拟器 使得在 PC 上可以模拟一个嵌入式设备 在 PC 机上可以方便的开发和测 试 程序 并且可以帮助工程师快速的进行分析和改进 提高了工作效率和降低了 项 目的开发成本 随着自由软件理念日益为大众广为接受 一批自由软件在 IT 的各个领域取 得了巨大成功 Linux 是其中最具代表性的一个 其自由 开放的特性吸引了 2 大批软件厂商和独立开发人员 多年的发展和业界同仁的共同努力已使其成为 高效 稳定 低成本的操作系统 而且由于 Linux 开放源代码 任何人都可以 对其进行裁减 修改 以适应自行开发的需要 2 2 系统分析系统分析 2 12 1 开发背景开发背景 IRC Intemet Relay Chat 网络中继聊天 协议用于文本交谈被设计出来 已经有许多年了 IRc 协议是基于客户服务器模型的 可以很好地分布式地在 许多机器上运行 一个典型的设置涉及一个进程 服务器 它作为中心点接受 客户 或其它服务器 的连接 并且实现要求的消息传送 多元技术和其它的功 能 这种分布模型 由于它要求每个服务器都拥有全局状态信息 限制了一个 网络所能达到的最大规模 因此是此协议最令人不能容忍的问题 现存的网络 能够以难以置信的速度持续增长 我们必须感谢硬件制造商们给了我们比以往 更加强大的系统 IRC 协议本身就是 个电话会议系统 虽然使用的是 C S 模 式 所以非常适合分布式的多个机器上使用 一个典型的建立包括一个单一的 处理器 服务器 形成一个中心节点 客户机 或其他服务器 连接这个节点去获 取消息或发送 群发等功能 IRC 协议已经在使用 TCP IP 网络协议的系统中 应用了 虽然 TCP IP 协议并不是必须的 但是现在 IRC 操作仅使用在这个方 面 3 2 22 2 聊天程序的基本聊天程序的基本需求需求 1 在 QT 或 miniGUI 编写聊天程序 交叉编译后下载到目标机 可实现两台 目标机可发送文本聊天 2 QT 或 miniGUI 界面设计至少包括 发送 重置 两个按钮 要求必须 把目标机的硬件键盘映射到 QT 设计的软件界面中 实现软件按钮的功能 2 32 3 需实现的主要功能需实现的主要功能 1 客户端输入服务器 IP 和端口号 2 服务器必须成功启动 3 每一个客户端可以寻找服务器 并且与服务器建立连接 4 客户端和服务器可以实现通信 5 通信的内容可以显示在面板上 6 利用 QT 设计界面 并下载到 MagicARM2410 上面 三 需求分析三 需求分析 3 13 1 QTQT 设计设计 QT 设计编写和调试阶段使用周立功 MagicARM2410 箱子提供的 QT for PC 编译器 运行测试阶段使用 QT for ARM 编译器 使用 QT for PC 阶段编译程序的步骤如下 以编译 hello cpp 程序为例 1 进入 x86 qtopia 目录 运行 set env 脚本 设置环境变量 set env 4 2 进入 hello 目录 然后用 progen 工具生成工程文件 hello pro cd hello vi hello cpp progen t app t o hello pro 3 使用 tmake 工具 生成 hello 工程的 Makefile 文件 tmake o Makefile hello pro 4 修改 Makefile 文件 在 LIBS 变量中增加需要用到的库 然后输入 make 命令编译 LIBS SUBLIBS L QTDIR lib lqte lm lstdc make 5 启动虚拟控制台 运行 hello 程序 主机须启动帧缓冲 必须能够访问 dev fb0 cd zylinux x86 qtopia set env cd hello hello qws 如果要将 Hello 程序发布到 MagicARM2410 上运行 还需进行以下工作 6 进入 zylinux arm qtopia 目录 并将 hello 工程复制到当前目录下 cd zylinux arm qtopia cp av zylinux x86 qtopia hello 7 运行当前目录下的 set env 文件 重新设置环境变量 进入 hello 目录 使用 tmake 工具 重新生成 Makefile 文件 5 set env cd hello tmake o Makefile hello pro 8 按照步骤 4 的方法修改包含库 编译 得到可执行文件 hello 将 hello 文 件添加到文件系统中 更新文件系统 9 插入 USB 鼠标和 USB 键盘 启动 MagicARM2410 启动 Qtopia 的终端 运行 hello 程序 利用同样的编译方法 客户端 QT 程序进行编译和调试 3 1 13 1 1 客户端客户端 QTQT 界面设计界面设计 客户端 QT 需要以下基本组件 1 两个 QEditLine 一个用于输入服务器 IP 地址 可读可写 另一个用于输 入服务器端口号 可读可写 2 三个按钮 一个用于连接服务器 另一个用于发送消息 最后一个用于清 空发送区域数据 3 四个标签 用于显示不用组件的内容 4 两个 MultiLineedit 一个用于显示通信内容 只读 一个作为发送区域 可读可写 3 23 2 服务器端和客户端的数据传输方式服务器端和客户端的数据传输方式 服务器端和客户端的数据是用 TCP 套接字来传输的 IP 地址表示 Internet 上的计算机 端口号标识正在计算机运行的进程 端口号与 IP 地址 的组合得出一个网络套接字 客户端使用 linux C 函数 socket 建立到服务器 的套接字连接 6 当套接字连接 socket 建立后 可以利用 linux C 语言中的 send 函数和 recv 函数来实现简单的发送和接收消息 3 33 3 服务器端功能设计服务器端功能设计 由于时间有限 服务器并没有用 QT 来编写界面 只是实现一个简单的控 制程序 服务器主要实现有 1 创建套接字 2 对套接字 IP 地址和端口号进行绑定 3 进行监听 4 等待客户端的连接 5 对客户端接收和发送数据 3 43 4 客户端功能设计客户端功能设计 客户端使用 QT 设计界面 客户端实现的功能如下 1 创建套接字 2 连接服务器 3 与服务器通信 四 总体设计四 总体设计 4 14 1 总体功能总体功能 根据对需求所做的分析 聊天程序需要实现的基本功能应包括以下几个方面 1 客户端输入服务器 IP 和端口号 2 服务器必须成功启动 7 3 每一个客户端可以寻找服务器 并且与服务器建立连接 4 客户端和服务器可以实现通信 5 通信的内容可以方便查看 使用 QT 设计的界面简洁 大方 操作简单 方便 容易上手 用户可以快 速掌握操作流程 五 五 详细设计详细设计 5 15 1 功能分析和描述功能分析和描述 聊天工具包括两大功能模块 客户端和服务器端 具体实现的功能创建套 接字 连接通信 接收数据显示和发送数据 5 25 2 客户端功能模块客户端功能模块 5 2 15 2 1 连接服务器连接服务器 连接服务器之前需要解析服务器地址 创建套接字 设置 sockaddr in 结 构体中相关参数 解析服务器地址 创建套接字 设置sockaddr in 结构体中相关参数 连接服务器 8 5 2 25 2 2 发送消息功能发送消息功能 连接功能是开始聊天前必须进行的步骤 连接成功之后 就可以进行发送 消息了 发送消息功能流程图如图 2 5 所示 是否连接成功 发送消息到服务器上 是 无法发送消息 否 发送的消息显示在交流 面板上 图 2 5 发送消息功能流程图 5 2 35 2 3 接收接收消息模块消息模块 连接成功后 就可以接收服务器发送过来的数据 9 是否连接成功 从服务器上接收消息 是 无法接收消息 否 接收的消息显示在交流 面板上 5 35 3 服务器功能模块服务器功能模块 服务器的设计并没有使用 QT 编写界面 服务器端实现的功能有 10 创建套接字 对套接字 I P地址和端口号进 行绑定 进行监听 等待客户端的连接 对客户端接收和发 送数据 图 2 8 服务器模块流程图 六 代码实现六 代码实现 6 16 1 客户端代码客户端代码 6 1 16 1 1 QTQT 构造和析构函数构造和析构函数 EditDemo EditDemo QWidget parent const char name QWidget parent name QGridLayout grid new QGridLayout this 6 3 0 0 IP addr 11 QLabel label1 new QLabel IP Addr this grid addWidget label1 0 0 edit ip new QLineEdit this edit ip setText 127 0 0 1 grid addWidget edit ip 0 1 Server Port QLabel label2 new QLabel Server Port this grid addWidget label2 1 0 edit port new QLineEdit this edit port setText 4321 grid addWidget edit port 1 1 QPushButton btn new QPushButton Connect this add the connect button grid addWidget btn 2 1 add the button connect btn SIGNAL clicked this SLOT ButtonConnect multiline input mode QLabel label3 new QLabel Contract Area this grid addWidget label3 3 0 multiedit contract new QMultiLineEdit this multiedit contract setReadOnly 1 set read only grid addWidget multiedit contract 3 1 12 QLabel label4 new QLabel Send Area this grid addWidget label4 4 0 multiedit send new QMultiLineEdit this grid addWidget multiedit send 4 1 QPushButton button send new QPushButton Send this add the send button grid addWidget button send 5 0 connect button send SIGNAL clicked this SLOT ButtonSend QPushButton button clear new QPushButton Clear this add the clear button grid addWidget button clear 5 1 connect button clear SIGNAL clicked this SLOT ButtonClear EditDemo EditDemo if socket flag 1 if create socket success close sockfd Close the socket printf Close the socket n 13 6 1 26 1 2 创建套接字创建套接字 void EditDemo CreateSocket void 地址解析函数 host gethostbyname edit ip text 创建 socket sockfd socket AF INET SOCK STREAM 0 设置 sockaddr in 结构体中相关参数 serv addr sin family AF INET serv addr sin port htons atoi edit port text serv addr sin addr struct in addr host h addr bzero 6 1 36 1 3 创建线程创建线程 void task void arg int recvbytes 0 char buf BUFFER SIZE 0 arg arg while 1 14 if recvbytes recv sockfd buf BUFFER SIZE 0 0 multiedit contract append Server said QString buf void CreateThread void int result 0 result pthread create Create Thread 6 26 2 服务器端代码服务器端代码 define PORT 4321 define BUFFER SIZE 1024 define MAX QUE CONN NM 5 int main struct sockaddr in server sockaddr client sockaddr int sin size recvbytes 15 unsigned int sendbytes 0 int sockfd client fd char buf BUFFER SIZE 建立 socket 连接 sockfd socket AF INET SOCK STREAM 0 设置 sockaddr in 结构体中相关参数 server sockaddr sin family AF INET server sockaddr sin port htons PORT server sock

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论