摘要:本文分析了终端通讯设备的组成及功能,并提出了终端通讯设备的核心部分的总体架构,基于ARM9硬件平台及Qt4creator的软件平台,在嵌入式Linux系统下,通过无线或有线的局域网,进行相互间的聊天、会议。

关键字:ARM9、Qtcreator4、局域网通信、Linux

  1. 前言

随着嵌入式系统的不断发展,嵌入式的处理器的性能不断提升,存储系统容量也在不断的扩大,各种多媒体应用程序被移植到嵌入式系统中,各种嵌入式应用程序成为了嵌入式开发的不可或缺的重要组成部分。随着Android系统的火热趋势,嵌入式应用程序将再进入一个新纪元。物联网概念的提出,让我们深切的体会到网络的重要性,现在如手机类似的终端所采用的聊天软件几乎都是QQ,本终端中的程序是自主开发,采用开源的Qt4creator平台,具有跨平台的强大特性,可实现终端设备、PC机的Windows与PC机的Linux系统间在局域网范围内的即时通讯。

选择Linux平台与Qtcreator4的开发环境主要有以下几个方面的考量:

(1)、Linux系统与Qt软件的开源特性;

(2)、Linux系统与嵌入式系统的紧密相关性;

(3)、Qt界面设计的强大性与美观性;

(4)、市场中Qt软件与Linux系统的普适性。

  1. 系统设计

本软件可安装于Linux系统和Windows的PC机上,同时也可以安装在具体相应嵌入式系统的终端设备中。主要完成三个功能:两人间的私聊、多人间的会议、与文件的传输。

其中,聊天时只需输入本局域网相应用户的IP地址,只要双方都使用此软件,便可实现聊天。开会议时首先由主持人打开程序中的会议程序,开始会议,局域网内的与会人员只需在自己的软件中相应的界面里面输入主持人设置的端口,与服务器端的IP地址便可开始会议。无论在会议阶段还是在聊天界面都是可以向本局域网内的I主机发送文件。

对于将本程序装入可连网终端的设计,写者选择了一款具有Redhat系统。

  1. 功能设计与实现

本应用程序的三大功能(聊天、开会、文件的发送与接收),由于聊天的可靠性要求不是太高,写者采用UDP协议,而会议信息与文件的传输的可靠性要求相对要高,因此采用的TCP协议。

程序的初始界面是一个欢迎使用的界面:

而后有一个可供选择的软件信息界面:

或者直接进入通讯模式界面:

随后可根据自己的需要来选择相应的模式,聊天:

在聊天的同时看聊天记录:

也可以选择会议模式,会议模式与聊天模式类似,但是,会多了新建会议的模块:

都可以修改字体、字型与字体的颜色等。

TCP文件传输:

TCP文件接收:

在欢迎界面、软件信息界面与通讯模式界面中,从一个界面切换到另一个界面中,以及为界面添加背景的代码如下:

 about *a = new about;  

 a->setStyleSheet

   ("QDialog#about{borderimage:url(images/back6.jpg)}");

 a->exec();

UDP协议实现天模块中,主要有以下几个实现模块:

 (1)、构造函数中:

   bool conn = connect(udpsocket,SIGNAL(readyRead()),

      this,SLOT(receive()));

 connect(udpsocket,SIGNAL(readyRead()),

this,SLOT(receive()));

 connect(ui->sendbtn,SIGNAL(clicked()),

this,SLOT(send()));

(2)、修改编码及发送信息:

  QByteArray text =ui->sendtedit->toPlainText().

             toLocal8Bit();

  len=udpsocket->writeDatagram(text,text.length(),

QHostAddress(ui->ipledit->text()),10500);

(3)、修改编码及接收信息:

  data.resize(udpsocket->pendingDatagramSize());

udpsocket->readDatagram(data.data(),data.size());

QString str=QString::fromLocal8Bit(data.data());

TCP协议实现的会议模块中,主要有以下几个功能模块:

 (1)、进入与离开会议室

   connect(tcpClientSocket,SIGNAL(updateClients(QString,int)),

          this,SLOT(updateClients(QString,int)));

  connect(tcpClientSocket,SIGNAL(disconnected(int)),

          this,SLOT(slotDisconnected(int)));

   void Server::updateClients(QString msg, int length)

  {

   emit updateMeeting(msg,length);

   qDebug()<<"updateClients"<<msg<<" "<<length;

    for(int i=0;i<tcpClientSocketList.count();i++)

   {

    QTcpSocket *item = tcpClientSocketList.at(i);

     if(item->write(msg.toLatin1(),length)!=length)

   continue;

   }

  }

(2)发送信息

  QByteArray text =ui->usrNameLedit->text().toLocal8Bit()+" "+

QTime::currentTime().toString().toLocal8Bit()+'\n'

+ui->qunSend_tedit->toPlainText().toLocal8Bit();

  tcpSocket->write(text,text.length());

  tcpSocket->read(datagram.data(),datagram.size());

QString msg =QString::fromLocal8Bit(datagram.data());

TCP协议实现的文件传输模块中,功能模块:

 totalBytes = localFile->size();//获取文件大小

QDataStream sendOut(&outBlock,QIODevice::WriteOnly);

sendOut.setVersion(QDataStream::Qt_4_3);

QString currentFile = fileName.

        right(fileName.size() - fileName.lastIndexOf('/')-1);

        //去除文件的路径部分

sendOut<<qint64(0)<<qint64(0)<<currentFile;

      //发关文件头结构:总长度、文件名长度和文件名

totalBytes += outBlock.size();

     //文件长度加上文件头的长度,后面的是求文件头的长度

sendOut.device()->seek(0);//读写指针从头开始

sendOut<<totalBytes<<qint64(

               (outBlock.size()-sizeof(qint64)*2));

bytesToWrite = totalBytes –

            tcpClient->write(outBlock);

            //发出文件头,并修改发送字节数

TCP协议实现的文件接收模块中,功能模块:

if(bytesReceived < totalBytes)

{

bytesReceived += tcpServerConnection->bytesAvailable();

inBlock = tcpServerConnection->readAll();

localFile->write(inBlock);

localFile->flush();

inBlock.resize(0);

}

  1. 结束语

参考文献

[1] 成洁,卢紫毅。Linux窗口程序设计——Qt4精彩实例分析,北京:清华大学出版社,2008.11.

[2] 蔡志明等。精通Qt4编程,北京:电子工业出版社,2008.1.

[3]李春葆,董尚燕,余云霞。C++面向对象程序设计,北京:清华大学出版社,2008.

【引用】基于ARM的局域网聊天、会议终端通讯设备相关推荐

  1. Android基于UDP的局域网聊天通信

    代码地址如下: http://www.demodashi.com/demo/12057.html 记得把这几点描述好咯:代码实现过程 + 项目文件结构截图 + 演示效果 1. 开发环境 1.1 开发工 ...

  2. 局域网聊天程序 java MySQL_课内资源 - 基于JAVA的局域网聊天软件的设计与实现(仿制QQ)...

    一.系统分析 1.1 问题描述客户端 实现简易版的局域网聊天器 实现富文本内容聊天 智能聊天机器人 群发消息 传送文件等功能 服务器端 实现群发通知 管理聊天线程 1.2 系统功能分析客户端功能 登陆 ...

  3. Android基于TCP的局域网聊天通信

    概述 在同一局域网内,两台设备通过TCP进行通信聊天. 详细 代码下载:http://www.demodashi.com/demo/10567.html 一.准备工作 开发环境 jdk1.8 Ecli ...

  4. java制作局域网聊天器_基于Java的局域网聊天工具

    一 需求分析 掌握Java语言的程序设计方法,理论结合实际操作巩固我们所学的现有知识,使用图形用户界面和socket通信实现一个聊天程序,充分利用线程知识,实现用一个局域网聊天室,同时学会处理各种异常 ...

  5. 基于JAVA的局域网聊天软件的设计与实现(仿制QQ)

    一.系统分析 1.1 问题描述 客户端 实现简易版的局域网聊天器 实现富文本内容聊天 智能聊天机器人 群发消息 传送文件等功能 服务器端 实现群发通知 管理聊天线程 1.2 系统功能分析 客户端功能 ...

  6. android局域网通信方案,Android基于TCP的局域网聊天通信

    一.准备工作 开发环境 jdk1.8 Eclipse Luna Service Release 1 (4.4.1) 运行环境: 华为荣耀6(Android4.4).华为p9(Android7.0) 实 ...

  7. 局域网聊天软件 设计文档怎么写?

    局域网聊天软件 设计文档怎么写?这种针对数据库记录的 局域网聊天软件 窃取,被一些攻击者称为拖库,于是有了一个自然而谐音的戏称脱裤.只是攻击者日趋不厚道,从前只是偷了人家的裤子,现在还要晾在大街上,并 ...

  8. 基于Qt的P2P局域网聊天及文件传送软件设计

    基于Qt的P2P局域网聊天及文件传送软件设计 zouxy09@qq.com http://blog.csdn.net/zouxy09         这是我的<通信网络>的课程设计作业,之 ...

  9. 基于Qt的QQ局域网聊天

    近几日闲来无事,便想做个东西玩玩,敲敲代码,取取经,玩玩Qt,做点小Demo.参考多方资料,结合了众多网友的技术,做了一个基于Qt的QQ局域网聊天软件. 源码下载:https://joeyos.git ...

最新文章

  1. 项目经理必读:虚拟化评估与设计14步
  2. C#和SqlServer中处理时间格式问题
  3. 单体预聚合的目的是什么_线型低密度聚乙烯的单体单元比例到底是多少?
  4. 学习笔记88—spyder生成的图单独窗口显示
  5. ES常用DSL语句(kibana常用语句)
  6. 使用CSS3关键帧动画创建的动态通知气泡
  7. CAS配置REST请求方式
  8. 清华大学软件工程课程总结
  9. 华为太极magisk安装教程_华为(HUAWEI)ROM安装包合集
  10. 数据库复习-3.常用的概念模型
  11. flashfxp 命令行
  12. unzip解压部分代码
  13. [附源码]计算机毕业设计springboot基于微信小程序的网络办公系统
  14. SMB Signing not required
  15. 有趣又实用的4款微信小程序,有了它们,APP都要靠边站!
  16. uniapp登陆页面功能
  17. RGB转换HSL,HSV及切割车牌
  18. 微信公众号菜单栏设置直接打电话拨号一键拨号
  19. maven settings 文件位置
  20. 逆向中常见寄存器及常用汇编指令

热门文章

  1. nginx 无法打开 libpcre.so.1问题解决办法
  2. 树莓派怎么运行python程序?
  3. 编程练习【验证外星语词典】
  4. linux 中qq的安装目录在哪,在linux系统中安装QQ
  5. java jdom解析xml文件_Java 使用JDOM解析XML文档
  6. 计算机一级2021excel,2021年计算机一级EXCEL操作题-20210514115911.doc-原创力文档
  7. PR/AE 超级变速插件Twixtor Pro 7.5.4汉化版WIN版中文使用教程
  8. [线性代数] 1.1 二阶与三阶行列式
  9. 企业3A信用证书办理有什么作用?评级内容有哪些?
  10. Java连接redis选择指定库操作