Qt之简易版网络调试助手
简述
qt中为网络编程提供了一个QtNetwork类,使用QtNetwork可以实现ftp文件传输,基于tcp/ip协议的客户端和(服务端)开发等等,本文基于QtNetwork中的tcp/ip协议实现的简单版网络调试助手。
使用模块时需要在pro工程文件中加入:
QT += network
效果
TCP服务端
QT对TCP/IP协议进行了封装,因此使用Qt创建一个TCP服务端变得简单。创建一个TCP服务端分为以下几个步骤:
- 新建一个socket,绑定新的客户端连接槽
- 监听
- 收发消息
头文件:
#ifndef TCPSERVER_H
#define TCPSERVER_H#include <QObject>class QTcpServer;
class QTcpSocket;
class QTextEdit;
class TCPServer : public QObject
{Q_OBJECT
public:explicit TCPServer(QString ip="127.0.0.1",quint16 port=8080,QObject *parent = nullptr);~TCPServer();//开启监听void listen();//获得连接数量int getConnectNum();//设置输出控件void setQTextEdit(QTextEdit *_edit);//设置ipvoid setip(QString _ip);//设置端口void setport(quint16 _port);//发送数据void sendData(QString data);void sendData(QString ip,QString data);//关闭服务端void closeServer();signals:void connectfilsh();void disconnectfilsh();
protected slots://新的客户端连接void newClient();
private:QString ip; quint16 port;QTcpServer *tcpserver=nullptr; //服务器QList<QTcpSocket *> clientlist;QTextEdit *eidt=nullptr; //输出框
};#endif // TCPSERVER_H
源文件
#include "tcpserver.h"#include <QtNetwork>
#include <QTcpServer>
#include <QTcpSocket>
#include <QDebug>
#include <QString>
#include <QTextEdit>
#include <QMessageBox>TCPServer::TCPServer(QString ip,quint16 port,QObject *parent) : QObject(parent),ip(ip),port(port)
{//新建一个tfp服务端并绑定客户端连接处理函数tcpserver=new QTcpServer();connect(tcpserver,&QTcpServer::newConnection,this,&TCPServer::newClient);
}TCPServer::~TCPServer()
{if(tcpserver){tcpserver->close();delete tcpserver;}
}
//开启监听
void TCPServer::listen()
{bool r=tcpserver->listen(QHostAddress(this->ip),this->port);if(r==false){QMessageBox::information(nullptr,QStringLiteral("提示"),QStringLiteral("开启失败!"));return;}else{// QMessageBox::information(nullptr,QStringLiteral("提示"),QStringLiteral("开启成功!"));emit connectfilsh();}
}
//获得连接数量
int TCPServer::getConnectNum()
{return clientlist.length();
}
//设置输出
void TCPServer::setQTextEdit(QTextEdit *_edit)
{this->eidt=_edit;
}void TCPServer::setip(QString _ip)
{this->ip=_ip;
}void TCPServer::setport(quint16 _port)
{this->port=_port;
}
//发送数据,(默认向全部连接的客户端发送)
void TCPServer::sendData(QString data)
{for(auto cli:clientlist){cli->write(data.toUtf8());}
}
//向指定ip的客户端发送数据
void TCPServer::sendData(QString ip, QString data)
{for(auto cli:clientlist){if(cli->peerAddress().toString().contains(ip)){cli->write(data.toLocal8Bit());break;}}
}
//关闭服务端
void TCPServer::closeServer()
{if(tcpserver){tcpserver->close();emit disconnectfilsh();}
}
//有新的客户端连接
void TCPServer::newClient()
{//获得连接的客户端指针QTcpSocket * client=tcpserver->nextPendingConnection();clientlist.push_back(client);connect(client,&QTcpSocket::readyRead,this,[this,client]{QString data =QString::fromLocal8Bit(client->readAll());if(eidt)eidt->append(data+"\n");});connect(client,&QTcpSocket::disconnected,this,[this,client]{QString address= client->peerAddress().toString();
// qDebug()<<address<<QStringLiteral("已断开...")<<endl;client->close();clientlist.removeOne(client);});
}
TCP客户端
创建一个TCP客户端的步骤为:
- 新建一个客户端(QTcpSocket),绑定readyRead信号
- 连接至服务端(connectToHost)
- 收发数据
头文件
#ifndef TCPCLIENT_H
#define TCPCLIENT_H#include <QObject>class QTcpSocket;
class QTextEdit;
class QTimer;
class TCPClient : public QObject
{Q_OBJECT
public:explicit TCPClient(QString ip,quint16 port,QObject *parent = nullptr);~TCPClient();//连接服务器void connectServer();//设置输出控件void setQTextEdit(QTextEdit *_edit);//设置ipvoid setip(QString _ip);//设置端口void setport(quint16 _port);//发送数据void sendData(QString data);//关闭连接void close();
signals:void connectfilsh();void disconnectfilsh();
public slots://读取数据void readData();//检查连接状态void checkConnectState();
private:QTcpSocket *client=nullptr;QTextEdit *edit=nullptr;QString ip;quint16 port;QTimer *timer=nullptr; //定时器,检查连接状态
};#endif // TCPCLIENT_H
源文件
#include "tcpclient.h"#include <QTcpSocket>
#include <QTextEdit>
#include <QMessageBox>
#include <QTimer>TCPClient::TCPClient(QString ip,quint16 port,QObject *parent) : QObject(parent),ip(ip),port(port)
{//新建一个tcp客户端client=new QTcpSocket();connect(client,&QTcpSocket::readyRead,this,&TCPClient::readData);//新建一个定时器,检查服务器是否主动断开timer=new QTimer();connect(timer,&QTimer::timeout,this,&TCPClient::checkConnectState);timer->start(1000);
}TCPClient::~TCPClient()
{if(client)delete client;if(timer){timer->stop();delete timer;}
}
//连接至服务器
void TCPClient::connectServer()
{client->connectToHost(ip,port);if(!client->waitForConnected()){QMessageBox::information(nullptr,QStringLiteral("提示"),QStringLiteral("连接失败,错误代码:")+QString::number(client->error()));delete client;client=nullptr;}else{emit connectfilsh();}
}void TCPClient::setQTextEdit(QTextEdit *_edit)
{this->edit=_edit;
}void TCPClient::setip(QString _ip)
{this->ip=_ip;
}void TCPClient::setport(quint16 _port)
{this->port=_port;
}
//发送数据
void TCPClient::sendData(QString data)
{if(client)client->write(data.toLocal8Bit());
}
//关闭客户端
void TCPClient::close()
{if(client){client->close();emit disconnectfilsh();}}
//读取数据
void TCPClient::readData()
{QString data=QString::fromLocal8Bit(client->readAll());edit->append(data+"\n");
}
//检查连接状态
void TCPClient::checkConnectState()
{if(client){if(client->state()==QAbstractSocket::UnconnectedState){client->close();emit disconnectfilsh();}}
}
源码链接
Qt之简易版网络调试助手相关推荐
- 在Ubuntu20.04中继续使用linux版“网络调试助手”的方法
在Ubuntu20.04中继续使用linux版"网络调试助手"的方法 网络调试助手是一款很好用的网络通信调试软件,对于初学网络编程的人员简单实用.windows版的调试助手在各个版 ...
- Qt编写网络调试助手(TCP客户端+TCP服务端+UDP服务端)终极版开源
时隔半年,对网络调试助手工具进行所有代码重写,这次目录结果整齐的一逼,代码整齐的一逼,非常完善了,打死也不再改版了.这次真的打死也不再改版了. 旧版本1:http://www.qtcn.org/bbs ...
- QT开发网络调试助手项目总结
之前整理了一些使用QT开发串口调试助手的项目. 博客地址:上位机总结 这次继续整理一些使用QT开发网络调试助手的项目. Qt开源作品41-网络调试助手增强版V2022 我的QT学习之路,编写UDP+t ...
- Qt精美应用程序界面设计,多功能(包含基于sql数据库的音乐、视频播放器、相册,串口、网络调试助手、游戏、天气查询等功能)
去年寒假疫情,我在家闲着没事,自制了一个由Qt Creator开发的精美多功能程序软件,功能包含音乐播放器.视频播放器.天气查询.串口调试助手.相册.网络调试助手.小游戏等,主界面如下图所示: 界面展 ...
- 用TCP/UDP 网络调试助手(PC版)无法获取网页信息
以前的网页均是http开头的,是没有加密的,以前用GET就能获取网页的信息,但是现在的基本是https开头的,是加密的,所以现在用以前的方法,只能返回301错误 现在想要用网络调试助手(PC版)来获取 ...
- 网络调试助手-程序设计-PyQt5实战 (Python socket GUI)
网络调试助手 程序设计 点此在我的博客中查看原文,显示效果更佳 NetAssist_PyQt 项目已开源分享至GitHub,如果这个项目和这篇博客对你有帮助的话,希望你能给我的GitHub仓库一颗小星 ...
- python写网络调试助手_Qt开源作品4-网络调试助手
## 一.前言 网络调试助手和串口调试助手是一对的,用Qt开发项目与硬件通信绝大部分都是要么串口通信(RS232 RS485 Modbus等),要么就是网络通信(TCP UDP HTTP等),所以一旦 ...
- 浅谈MQTT底层原理(网络调试助手直连阿里云)
目录 第一节 本文探讨的内容 第二节 环境搭建 第三节 MQTT控制报文格式 第四节 CONNEC报文 第五节 订阅和取消订阅 第六节 接收消息和发布消息 第七节 网络调试助手直连阿里云极速体验 第一 ...
- 【上位机】通过QTCreator编写WIFI上位机与网络调试助手通信绘制曲线
文章目录 前言 一.使用QT Creator编写上位机 二.上位机与网络调试助手联调 三.总结 前言 17年电赛H题中要求编写WIFI上位机实现远程幅频特性曲线显示, 以下是本人在近期摸索出来的一些心 ...
- 一款基于Qt的跨平台开源串口调试助手EasySerial
文章目录 1. 简述 2. 开发步骤 2.1 界面布置 2.2 串口搜索与打开 2.3 ASCII/HEX接收 2.4 接收数据保存 2.5 ASCII/HEX发送 2.6 周期发送 2.7 读取文件 ...
最新文章
- ADO.Net五个对象
- 解决QT无法调试问题-----the cdb process terminated
- 二、SpringMVC的常用注解——1-@Controller
- Java-Web 编码和路径
- Python常用运算符含义与用法演示
- element ui实现动态显示textarea剩余字数
- java扫描器创建,java – 如何创建条码扫描器(Android)?
- c++ DLL-DEF-LIB
- Springboot整合JasperReport报表以及报表打印功能
- layout android name,android中的android:name属性
- 粤语 之 粤语学习的一些学习网站和工具整理
- 《诗经·陈风·月出》presentation
- 着色问题 一个圆分成N个扇形,M种颜色,相邻区块重色 总工的着色方法数
- 智能生活 App SDK 开发入门教程【内附代码段 】
- 手把手教你如何使用Unity搭建简易图片服务器
- ValueError: Variable in_hidden/weights already exists, disallowed. Did you mean to set reuse=True or
- 微信 及支付宝 支付接口 功能
- Banana PI (香蕉派) 安装 ubuntu-core-14 最小核心的操作步骤
- QQ能上网,网页不行总解决办法
- Clippper模拟量输出设置
热门文章
- 怎么用计算机直接截图,电脑怎么截图?使用电脑截图的多种方法
- python语言就业方向_Python语言十大就业方向!老男孩教育
- linux 查看策略路由,Linux下的策略路由。
- Stressful Training(二分+贪心+优先队列)
- 租船题库整理-判断、选择
- 金庸走过,留给马云和阿里巴巴一个“江湖”
- vue ajax请求结束再次执行查询方法,Vue.js 监控v-for循环渲染完成后再执行方法
- 笑晕,小米新logo是这么来的
- cmdb 指南_无限供应商制造商指南
- 微信屏蔽跳去App Store链接的解决方法