0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英创信息技术Linux主板Qt网络应用程序简介

英创信息技术 来源:英创信息技术 作者:英创信息技术 2020-01-17 09:42 次阅读

Linux中的网络编程是通过socket接口来进行的。我们常说的socket接口是一种特殊的I/O,它也是一种文件描述符,关于socket编程的应用可以参考英创公司光盘中使用必读的相关内容。

现在在英创公司提供的例程Step3_TCPServe基础上,加入Qt显示单元,使其能通过显示屏进行操作,基本的思想是还是利用Qt的信号和插槽机制进行对象间的通讯,当接收到的数据的时候,发出Signal,Qt 的事件循环中接收到这个信号,调用定义好的Slot显示接收到的数据。

Step3_TCPServe是一个支持多个客户端的连接TCPServer示例,该例程采用了面向对象的C++编程,创建了CTCPServer和CTCPCustom两个类,其中CTCPServer类负责侦听客户端的连接,一旦有客户端请求连接,它就负责接受此连接,并创建一个新的CTCPCustom类对象与客户端进行通讯,然后CTCPServer类接着监听客户端的连接请求,所以需要让CTCPServer类和CTCPCustom类继承QObject类的属性,使QObject成为CTCPServer类和CTCPCustom类的基类,然后在CTCPServer类和CTCPCustom类中各加入一个signal,让CTCPServer类和CTCPCustom类的信号关联,这样当CTCPCustom类发出信号CTCPServer类也会发出信号,再让CTCPServer类的信号和Qt显示通过信号和插槽的机制连接,但是对于网络通信的操作部分并不用做修改,原理如下图:

继承QObject类的属性,加入信号和槽的方法在《英创Linux主板Qt串口应用程序简介》中有较详细的说明,在CTCPCustom类中,添加的方法也一样,当判断接收到数据时,发送信号,添加程序:

emit pSocket->readyRead(pSocket->RecvBuf);

在前面提到,在CTCPServer类中,当判断有客户端请求连接时,会创建一个CTCPCustom类对象与客户端进行通讯,这时再将CTCPServer类和CTCPCustom类的信号关联:

connect(pClientSocket,SIGNAL(readyRead(QString)),pSocket,SIGNAL(readyRead(QString)));

在Qt中,将两个信号关联,如同上面那样,当pSocket中的信号发送时,pClientSocket中的信号也会跟着发送。

最后在显示窗口Widget类中,将CTCPServer类的信号和显示槽函数关联:

connect(m_TCPServer,SIGNAL(readyRead(QString)),this,SLOT(readData(QString)),Qt::QueuedConnection);

然后可以在显示界面中添加了一些其他功能组件,比如按钮等,然后编写组件的事件响应函数,实现想要的功能,在本例程中,添加了一些按钮和显示,用来选择启动TCPServer,显示IP和端口号等,部分实现代码如下:

void Widget::on_startpushButton_clicked() //侦听按钮
{
char buff_1[16],buff_2[16];
m_TCPServer=new CTCPServer;
m_TCPServer->m_LocalPort = 1001;
if((m_TCPServer->Open())<0)
{
QMessageBox::information(this,tr('错误'),tr('创建失败'),QMessageBox::Yes);
delete m_TCPServer;
return;
}
connect(m_TCPServer,SIGNAL(readyRead(QString)),this,SLOT(readData(QString)),Qt::QueuedConnection); //关联信号和槽
ui->startpushButton->setEnabled(false);
ui->textBrowser_3->setEnabled(true);
QString s=QString::number(m_TCPServer->m_LocalPort,10);
ui->textBrowser_3->insertPlainText(s); //显示端口号
ui->textBrowser_2->setEnabled(true);
if((m_TCPServer->get_inetip('eth0',buff_1))==0)
{
//显示eth0的IP地址
ui->textBrowser_2->append( QString(QLatin1String(buff_1)));
}
if((m_TCPServer->get_inetip('eth1',buff_2))==0)
{
//显示eth1的IP地址
ui->textBrowser_2->append( QString(QLatin1String(buff_2)));
}
ui->closepushButton->setEnabled(true);
}

最后在工程中添加main.cpp,在main函数中,主要是对字体进行设置,并且显示我们设计的窗口:

int main( int argc,char* argv[] )
{
QApplication a(argc, argv);
QFont font('simsun',9,QFont::Bold); //设置字体
QTextCodec::setCodecForTr(QTextCodec::codecForName('utf8'));
a.setFont(font);
Widget w;
w.show();
return a.exec(); //返回Qt事件循环
}

程序运行效果:

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11302

    浏览量

    209430
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6085

    浏览量

    35314
收藏 人收藏

    评论

    相关推荐

    飞腾助力首届教育信息技术应用创新大赛圆满落幕

    近日,由中国教育技术协会主办,教育部教育管理信息中心教育信实验室、公安部第三研究所、中国电子工业标准化技术协会信工委会支持,北京航空航天
    的头像 发表于 12-24 09:57 81次阅读

    有方科技参编的信息技术团体标准发布

    近日,有方科技参编的《信息技术产品供应链成熟度 共性指标 第1部分:企业背景评价》《信息技术产品供应链成熟度 共性指标 第2部分:技术掌控评价》《信息技术产品供应链成熟度 共性指标 第
    的头像 发表于 12-23 10:44 93次阅读

    龙芯中科助力2024首届教育信息技术应用创新大赛成功举办

    近日,2024首届教育信息技术应用创新大赛在北京航空航天大学成功举办。本次大赛由中国教育技术协会主办,教育信实验室、公安部第三研究所、中国电子工业标准化技术协会信
    的头像 发表于 12-19 17:02 196次阅读

    中科达荣获2024年软件和信息技术服务优秀企业

    及前百家企业”名单。中科达凭借非凡的技术实力与持续的创新能力,成功入选“2024年度软件和信息技术服务竞争力百强企业”以及“2024年软件和信息技术服务优秀企业”。
    的头像 发表于 10-30 11:44 482次阅读

    用国产化硬件守护信息安全,飞腾D2000网络安全主板应用优势

    在当今数字化时代,信息技术飞速发展,网络攻击事件愈发频繁,网络安全面临着前所未有的挑战。而国产网络安全主板的出现,为守护
    的头像 发表于 10-29 10:10 225次阅读

    国产化背景下的工控主板发展现状

    ,是信息技术应用创新产业的简称,于2016年“信工委会”(信息技术应用创新工作委员会)提出,目的就是要推动我们国内软硬件关键技术的研发
    的头像 发表于 09-21 16:15 395次阅读

    Linux网络协议栈的实现

    网络协议栈是操作系统核心的一个重要组成部分,负责管理网络通信中的数据包处理。在 Linux 操作系统中,网络协议栈(Network Stack)负责实现 TCP/IP 协议簇,处理
    的头像 发表于 09-10 09:51 307次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>网络</b>协议栈的实现

    梯度科技入选2023年信息技术应用创新解决方案名单

    日前,工业和信息化部网络安全产业发展中心(工业和信息化部信息中心)在天津举办2024信息技术应用创新发展大会暨解决方案应用推广大会。会上正式
    的头像 发表于 09-09 16:29 430次阅读

    在嵌入式系统中集成Rust和Qt的实践

    Rust 拥有丰富的库生态系统,用于序列化和反序列化、异步操作、解析不安全输入、线程、静态分析等,而 Qt 是一个 C++ 工具包,支持跨各种平台的丰富的、基于 GUI 的应用程序,从 iOS 到嵌入式Linux
    发表于 05-03 10:26 1809次阅读
    在嵌入式系统中集成Rust和<b class='flag-5'>Qt</b>的实践

    Linux是做什么用的?

    ,进行软件开发、系统管理和网络管理等工作。 5、学习和教育:Linux是一个开源的操作系统,提供了大量的学习资源和教育机会。许多学校和教育机构使用Linux来教授计算机科学和信息技术
    发表于 04-28 15:40

    FPGA板子可以跑Qt应用程序

    Qt作为一款跨平台GUI图形界面设计软件,她可以在windows、Linux上运行,没听说过在FPGA的板子上运行Qt程序呢?
    发表于 03-28 23:27

    Qt上位机开发实战案例

    Qt框架的开发人员能迅速上手和操作。 即使不开发Qt应用程序Qt Creator也是一个简单易用且功能强大的IDE。
    的头像 发表于 03-13 12:31 2508次阅读
    <b class='flag-5'>Qt</b>上位机开发实战案例

    RX78M组 EtherCAT ETG.5003示例程序固件信息技术

    电子发烧友网站提供《RX78M组 EtherCAT ETG.5003示例程序固件信息技术.pdf》资料免费下载
    发表于 02-21 14:22 1次下载
    RX78M组  EtherCAT ETG.5003示例<b class='flag-5'>程序</b>固件<b class='flag-5'>信息技术</b>

    适用于Linux的QRadioLink SDR客户应用程序

    QRadioLink 是一个 GNU/Linux 多模(模拟和数字)SDR(软件定义无线电)收发器应用程序,利用网络实现电台与 VOIP 桥接(IP 上的电台),它建立在 GNU 电台之上,允许使用不同的数字和模拟无线电信号以及
    的头像 发表于 01-11 11:04 1222次阅读
    适用于<b class='flag-5'>Linux</b>的QRadioLink SDR客户<b class='flag-5'>应用程序</b>

    如何构建linux开发环境和编译软件工程、应用程序

    前文介绍了如何使用官方提供的镜像文件启动开发板,本文将说明如何构建linux开发环境和编译软件工程、应用程序
    的头像 发表于 01-03 12:31 2052次阅读
    如何构建<b class='flag-5'>linux</b>开发环境和编译软件工程、<b class='flag-5'>应用程序</b>