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

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

关键字:ARM9Qtcreator4、局域网通信、Linux

  1. 前言

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

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

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

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

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

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

  1. 系统设计

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

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

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

  1. 功能设计与实现

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

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

基于ARM的局域网聊天、会议终端通讯设备 - 林銮 - 爱生活,更爱自己


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

 

基于ARM的局域网聊天、会议终端通讯设备 - 林銮 - 爱生活,更爱自己

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

 基于ARM的局域网聊天、会议终端通讯设备 - 林銮 - 爱生活,更爱自己

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

基于ARM的局域网聊天、会议终端通讯设备 - 林銮 - 爱生活,更爱自己
  在聊天的同时看聊天记录:
基于ARM的局域网聊天、会议终端通讯设备 - 林銮 - 爱生活,更爱自己
 

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

基于ARM的局域网聊天、会议终端通讯设备 - 林銮 - 爱生活,更爱自己
 

 基于ARM的局域网聊天、会议终端通讯设备 - 林銮 - 爱生活,更爱自己

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

TCP文件传输:

基于ARM的局域网聊天、会议终端通讯设备 - 林銮 - 爱生活,更爱自己
 

TCP文件接收:

基于ARM的局域网聊天、会议终端通讯设备 - 林銮 - 爱生活,更爱自己
  在欢迎界面、软件信息界面与通讯模式界面中,从一个界面切换到另一个界面中,以及为界面添加背景的代码如下:

 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.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值