简述

qt中为网络编程提供了一个QtNetwork类,使用QtNetwork可以实现ftp文件传输,基于tcp/ip协议的客户端和(服务端)开发等等,本文基于QtNetwork中的tcp/ip协议实现的简单版网络调试助手。
使用模块时需要在pro工程文件中加入:

QT       += network

效果

TCP服务端

QT对TCP/IP协议进行了封装,因此使用Qt创建一个TCP服务端变得简单。创建一个TCP服务端分为以下几个步骤:

  1. 新建一个socket,绑定新的客户端连接槽
  2. 监听
  3. 收发消息
    头文件:
#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客户端的步骤为:

  1. 新建一个客户端(QTcpSocket),绑定readyRead信号
  2. 连接至服务端(connectToHost)
  3. 收发数据
    头文件
#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之简易版网络调试助手相关推荐

  1. 在Ubuntu20.04中继续使用linux版“网络调试助手”的方法

    在Ubuntu20.04中继续使用linux版"网络调试助手"的方法 网络调试助手是一款很好用的网络通信调试软件,对于初学网络编程的人员简单实用.windows版的调试助手在各个版 ...

  2. Qt编写网络调试助手(TCP客户端+TCP服务端+UDP服务端)终极版开源

    时隔半年,对网络调试助手工具进行所有代码重写,这次目录结果整齐的一逼,代码整齐的一逼,非常完善了,打死也不再改版了.这次真的打死也不再改版了. 旧版本1:http://www.qtcn.org/bbs ...

  3. QT开发网络调试助手项目总结

    之前整理了一些使用QT开发串口调试助手的项目. 博客地址:上位机总结 这次继续整理一些使用QT开发网络调试助手的项目. Qt开源作品41-网络调试助手增强版V2022 我的QT学习之路,编写UDP+t ...

  4. Qt精美应用程序界面设计,多功能(包含基于sql数据库的音乐、视频播放器、相册,串口、网络调试助手、游戏、天气查询等功能)

    去年寒假疫情,我在家闲着没事,自制了一个由Qt Creator开发的精美多功能程序软件,功能包含音乐播放器.视频播放器.天气查询.串口调试助手.相册.网络调试助手.小游戏等,主界面如下图所示: 界面展 ...

  5. 用TCP/UDP 网络调试助手(PC版)无法获取网页信息

    以前的网页均是http开头的,是没有加密的,以前用GET就能获取网页的信息,但是现在的基本是https开头的,是加密的,所以现在用以前的方法,只能返回301错误 现在想要用网络调试助手(PC版)来获取 ...

  6. 网络调试助手-程序设计-PyQt5实战 (Python socket GUI)

    网络调试助手 程序设计 点此在我的博客中查看原文,显示效果更佳 NetAssist_PyQt 项目已开源分享至GitHub,如果这个项目和这篇博客对你有帮助的话,希望你能给我的GitHub仓库一颗小星 ...

  7. python写网络调试助手_Qt开源作品4-网络调试助手

    ## 一.前言 网络调试助手和串口调试助手是一对的,用Qt开发项目与硬件通信绝大部分都是要么串口通信(RS232 RS485 Modbus等),要么就是网络通信(TCP UDP HTTP等),所以一旦 ...

  8. 浅谈MQTT底层原理(网络调试助手直连阿里云)

    目录 第一节 本文探讨的内容 第二节 环境搭建 第三节 MQTT控制报文格式 第四节 CONNEC报文 第五节 订阅和取消订阅 第六节 接收消息和发布消息 第七节 网络调试助手直连阿里云极速体验 第一 ...

  9. 【上位机】通过QTCreator编写WIFI上位机与网络调试助手通信绘制曲线

    文章目录 前言 一.使用QT Creator编写上位机 二.上位机与网络调试助手联调 三.总结 前言 17年电赛H题中要求编写WIFI上位机实现远程幅频特性曲线显示, 以下是本人在近期摸索出来的一些心 ...

  10. 一款基于Qt的跨平台开源串口调试助手EasySerial

    文章目录 1. 简述 2. 开发步骤 2.1 界面布置 2.2 串口搜索与打开 2.3 ASCII/HEX接收 2.4 接收数据保存 2.5 ASCII/HEX发送 2.6 周期发送 2.7 读取文件 ...

最新文章

  1. ADO.Net五个对象
  2. 解决QT无法调试问题-----the cdb process terminated
  3. 二、SpringMVC的常用注解——1-@Controller
  4. Java-Web 编码和路径
  5. Python常用运算符含义与用法演示
  6. element ui实现动态显示textarea剩余字数
  7. java扫描器创建,java – 如何创建条码扫描器(Android)?
  8. c++ DLL-DEF-LIB
  9. Springboot整合JasperReport报表以及报表打印功能
  10. layout android name,android中的android:name属性
  11. 粤语 之 粤语学习的一些学习网站和工具整理
  12. 《诗经·陈风·月出》presentation
  13. 着色问题 一个圆分成N个扇形,M种颜色,相邻区块重色 总工的着色方法数
  14. 智能生活 App SDK 开发入门教程【内附代码段 】
  15. 手把手教你如何使用Unity搭建简易图片服务器
  16. ValueError: Variable in_hidden/weights already exists, disallowed. Did you mean to set reuse=True or
  17. 微信 及支付宝 支付接口 功能
  18. Banana PI (香蕉派) 安装 ubuntu-core-14 最小核心的操作步骤
  19. QQ能上网,网页不行总解决办法
  20. Clippper模拟量输出设置

热门文章

  1. 怎么用计算机直接截图,电脑怎么截图?使用电脑截图的多种方法
  2. python语言就业方向_Python语言十大就业方向!老男孩教育
  3. linux 查看策略路由,Linux下的策略路由。
  4. Stressful Training(二分+贪心+优先队列)
  5. 租船题库整理-判断、选择
  6. 金庸走过,留给马云和阿里巴巴一个“江湖”
  7. vue ajax请求结束再次执行查询方法,Vue.js 监控v-for循环渲染完成后再执行方法
  8. 笑晕,小米新logo是这么来的
  9. cmdb 指南_无限供应商制造商指南
  10. 微信屏蔽跳去App Store链接的解决方法