c++ qt获取电脑的内存_Qt官方示例-TCP客户端/服务器示例
该示例演示了在本地主机上的TCP客户端和服务器是如何通讯的。
客户端
绑定信号槽。
connect(&tcpClient, &QAbstractSocket::connected, this, &Dialog::startTransfer); /* 连接到服务器时回送消息给服务器 */
connect(&tcpClient, &QIODevice::bytesWritten,this, &Dialog::updateClientProgress); /* 绑定写数据到服务器的信号槽 */
连接到服务器。
tcpClient.connectToHost(QHostAddress::LocalHost, tcpServer.serverPort());
这里比较有意思的是,客户端连接到服务器->客户端(tcpClient)触发startTransfer槽函数->调用tcpClient.write
->触发QIODevice::bytesWritten
信号->触发updateClientProgress槽函数调用->就一直tcpClient.write
,直到if条件不成立后后停止发送。
void Dialog::startTransfer()
{// called when the TCP client connected to the loopback serverbytesToWrite = TotalBytes - int(tcpClient.write(QByteArray(PayloadSize, '@')));clientStatusLabel->setText(tr("Connected"));
}
void Dialog::updateClientProgress(qint64 numBytes)
{// called when the TCP client has written some bytesbytesWritten += int(numBytes);// only write more if not finished and when the Qt write buffer is below a certain size.if (bytesToWrite > 0 && tcpClient.bytesToWrite() <= 4 * PayloadSize) /* 直到if条件不成立后后停止发送 */bytesToWrite -= tcpClient.write(QByteArray(qMin(bytesToWrite, PayloadSize), '@'));clientProgressBar->setMaximum(TotalBytes);clientProgressBar->setValue(bytesWritten);clientStatusLabel->setText(tr("Sent %1MB").arg(bytesWritten / (1024 * 1024)));
}
服务端
绑定信号槽用于新连接:
connect(&tcpServer, &QTcpServer::newConnection,this, &Dialog::acceptConnection);
监听客户端连接。
!tcpServer.isListening() && !tcpServer.listen()
服务端新连接到来:
void Dialog::acceptConnection()
{tcpServerConnection = tcpServer.nextPendingConnection();if (!tcpServerConnection) {serverStatusLabel->setText(tr("Error: got invalid pending connection!"));return;}connect(tcpServerConnection, &QIODevice::readyRead,this, &Dialog::updateServerProgress); /* 接受客户端数据的槽函数 */connect(tcpServerConnection,QOverload<QAbstractSocket::SocketError>::of(&QAbstractSocket::error),this, &Dialog::displayError); /* 错误反馈 */connect(tcpServerConnection, &QTcpSocket::disconnected,tcpServerConnection, &QTcpSocket::deleteLater); /* 断开反馈 */serverStatusLabel->setText(tr("Accepted connection"));tcpServer.close();
}
接收来自客户端的数据:
void Dialog::updateServerProgress()
{bytesReceived += int(tcpServerConnection->bytesAvailable());tcpServerConnection->readAll(); /* 读数据 */serverProgressBar->setMaximum(TotalBytes);serverProgressBar->setValue(bytesReceived); /* 设置进度条 */serverStatusLabel->setText(tr("Received %1MB") /* 显示在界面上 */.arg(bytesReceived / (1024 * 1024)));if (bytesReceived == TotalBytes) {tcpServerConnection->close();startButton->setEnabled(true);
#ifndef QT_NO_CURSORQApplication::restoreOverrideCursor();
#endif}
}
关于更多
- 在QtCreator软件可以找到:
- 或在以下Qt安装目录找到:
C:Qt{你的Qt版本}Examples{你的Qt版本}networkloopback
- 相关链接
https://doc.qt.io/qt-5/qtnetwork-loopback-example.html
- Qt君公众号回复『Qt示例』获取更多内容。
c++ qt获取电脑的内存_Qt官方示例-TCP客户端/服务器示例相关推荐
- c++ qt获取电脑的内存_Qt官方示例信号量
❝ 演示Qt多线程的信号量操作编程. ❞ 生产者将数据写入缓冲区,直到到达缓冲区末尾为止,然后从头开始重新开始,覆盖现有数据.使用者线程读取生成的数据,并将其写入标准错误. 信号量比互斥量可以 ...
- c++ qt获取电脑的内存_QT开发(十四)——QT绘图系统
一.QT绘图原理 Qt4中的2D绘图系统称为Arthur绘图系统,可以使用相同的API在屏幕上和绘图设备上进行绘制,主要基于QPainter.QPainterDevice和 QPainterEngin ...
- qt获取combobox的值_Qt官方示例嵌套甜甜圈
❝ 本示例演示如何使用QPieSeries API创建嵌套的甜甜圈图. ❞ 创建嵌套甜甜圈图 先创建一个QChartView实例并启用抗锯齿.然后从QChartView实例获得一个QChart对象 ...
- 获取计算机最大磁盘,Qt获取电脑磁盘容量(示例代码)
项目中用到了监测某磁盘(如:C盘.D盘等)的总容量和可用容量,查了一下,发现其实挺简单,调用一个Windows自带的API:GetDiskFreeSpaceEx( ... )就可以解决.用Qt做了一个 ...
- QT自制秒表计时器、可获取电脑时间
自制秒表 功能 : 开始 停止 打点 重置 显示电脑当前日期与时间 界面 界面总共包含三种控件: Label Push Button Text Browser 三种控件分别用于以下显示: 3. 代码 ...
- 使用 Qt 获取 UDP 数据并显示成图片
一个项目,要接收 UDP 数据包,解析并获取其中的数据,主要根据解析出来的行号和序号将数据拼接起来,然后将拼接起来的数据(最重要的数据是 R.G.B 三个通道的像素值)显示在窗口中.考虑到每秒钟要接收 ...
- C# 获取电脑的网络连接状态
C# 获取电脑的网络连接状态 原文:C# 获取电脑的网络连接状态 判断连网的方法介绍 1. InternetGetConnectedState 此函数获取网络状态有延时,且对网卡伤害较大 MSDN官方 ...
- Python获取电脑硬件信息及状态的实现方法
From: http://www.jb51.net/article/54470.htm 这篇文章主要介绍了Python获取电脑硬件信息及状态的实现方法,是一个很实用的技巧,需要的朋友可以参考下 本文以 ...
- linux qt 读系统信息,使用Qt获取系统版本
获取Windows,Mac,IOS,Android,Linux等系统版本信息. Qt 4版本 可以获取到系统版本的变量或函数 头文件 #include 使用公有静态变量和静态方法获取Windows系统 ...
最新文章
- 中国AI开发者真实现状:写代码这条路,会走多久?
- Jsp实现网上定餐系统
- maven常用的命令(window控制台和linux命令是一致的)
- knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案
- SpringBoot四大核心之actuator——程序监控器
- mysql查询连续次数_Mysql如何查询连续的时间次数
- 走火入魔.NET从C/S单点登录到B/S系统的例子,SUID(System Unique Identification)
- 雷达人体存在感应器方案,智能物联网感知技术,实时感应人体存在
- Linux网卡状态查看
- Linux内核学习开始
- ceph 部署后rbd块设备读写只有10M左右,慢的更龟速一样,怎样解决!,求各位博友指点……,感激不尽……...
- 360无线路由器dns服务器,路由器的首选dns服务器怎么填
- 流程图 FlowChart
- (Win10+vs2017)配置OpenCV开发环境
- Java之数组实现增删改
- android 7.0 iso下载地址,iOS 7.0固件 全系列官方正式版下载地址
- Android系统架构与分层
- 34年的见证:从“用脚丈量”到“云端管理”
- PXE工作原理(有图有真相)
- STM8L 软件I2C读写操作