当前位置: 首页 > news >正文

溧水网站建设上海基础微网站开发

溧水网站建设,上海基础微网站开发,东莞房价2022,广州优秀网站设计简介 软件开发中#xff0c;可能经常会用到TCP调试工具。本人使用QT开发了一款TCP调试工具#xff0c;方便大家使用。本文章主要介绍下#xff0c;该工具的功能#xff0c;以及如何在Qt中实现TCP服务器的并发。 界面展示 安装界面 桌面图标。安装后会生成桌面图标#…简介 软件开发中可能经常会用到TCP调试工具。本人使用QT开发了一款TCP调试工具方便大家使用。本文章主要介绍下该工具的功能以及如何在Qt中实现TCP服务器的并发。 界面展示 安装界面 桌面图标。安装后会生成桌面图标双击图标可以打开程序。 界面展示 功能说明 本程序使用Qt实现了TCP客户端和服务端服务端并发数默认为100可配置。客户端连接后可以在服务端看到连接的客户端信息服务端可以指定给某一个客户端发送消息。服务端不支持广播后续版本会完善。 软件下载 本程序已经制作成安装包形式下载安装后可直接使用。gitee下载CSDN资源下载 Qt实现服务端并发 Qt实现服务端多并发时可以实现一个类 TcpServerTools该类需要继承于 QTcpServer然后重写以下两个函数void setMaxPendingConnections(int numConnections) 该函数设置服务端最大连接数 void incomingConnection(qintptr socketDescriptor); 当有新连接时会触发该函数我们需要在该函数中将套接字保存起来。可以将套接字保存到一个Hash中 QHashint, TcpSocketTools* 核心源代码 这里只提供了服务端实现并发的核心源代码主要有三个文件 networkdebugtools.cpp 为主界面文件实现UI交互。tcpservertools.cpp 主要实现接受客户端连接请求保存套接字到hash容器中。tcpsockettools.cpp 中主要实现处理客户端数据和断开请求。 三者之间可以自己定义信号槽实现通信整体源代码不提供请谅解。 networkdebugtools.h #ifndef NETWORKDEBUGTOOLS_H#define NETWORKDEBUGTOOLS_H#include QWidget#include QEvent#include QMouseEvent#include QMenu#include tcpservertools.h#include mapQT_BEGIN_NAMESPACEnamespace Ui { class NetworkDebugTools; }QT_END_NAMESPACEclass NetworkDebugTools : public QWidget{Q_OBJECTpublic:NetworkDebugTools(QWidget *parent nullptr);~NetworkDebugTools();private slots:void on_pushButton_send_clicked();void on_pushButton_listen_clicked();private:Ui::NetworkDebugTools *ui;TcpServerTools *mTcpServerTools;};#endif // NETWORKDEBUGTOOLS_Hnetworkdebugtools.cpp #include networkdebugtools.h#include ui_networkdebugtools.h#include QMessageBox#include QHostInfo#include QTableWidgetItemNetworkDebugTools::NetworkDebugTools(QWidget *parent): QWidget(parent), ui(new Ui::NetworkDebugTools){ui-setupUi(this);mTcpServerTools new TcpServerTools();}void NetworkDebugTools::on_pushButton_send_clicked(){//获取当前选中的客户端信息QString curAddr ui-tableWidget_clientInfo-item(curRow, 0)-text();QHashint, TcpSocketTools*::iterator iter mTcpServerTools-tcpClient-begin();for (; iter ! mTcpServerTools-tcpClient-end(); iter) {QString iterAddr iter.value()-peerAddress().toString() : QString::number(iter.value()-peerPort());if (iterAddr.compare(curAddr) 0) {//这里hash容器tcpClient中保存的value就是socket可以直接通过socket给客户端发送数据//同样可以通过该socket获取客户端的ip和端口然后与我们点击的客户端信息比对就可以实现对指定客户端发送消息iter.value()-write(ui-plainTextEdit_send-toPlainText().toLocal8Bit());break;}}}void NetworkDebugTools::on_pushButton_listen_clicked(){if (ui-pushButton_listen-text().compare(监听) 0) {ui-pushButton_listen-setText(关闭);mTcpServerTools-setMaxPendingConnections(mConfigTools-getConnCount());mTcpServerTools-startListen();}else {ui-pushButton_listen-setText(监听);mTcpServerTools-closeConnect();}}tcpservertools.h #ifndef TCPSERVERTOOLS_H#define TCPSERVERTOOLS_H#include QWidget#include QTcpServer#include QHostInfo#include QAbstractSocket#include QTcpSocket#include tcpsockettools.h#define THREAD_MAX 20class TcpServerTools : public QTcpServer{Q_OBJECTpublic:explicit TcpServerTools(QTcpServer *parent 0);~TcpServerTools();//开始监听bool startListen();//关闭连接void closeConnect();//设置最大连接数void setMaxPendingConnections(int numConnections);protected:// 有新连接到来时该函数会被触发void incomingConnection(qintptr socketDescriptor);private:QTcpServer *mTcpServer; //tcp服务对象public:QHashint, TcpSocketTools* *tcpClient;// 该对象中保存套接字};#endif // TCPSERVERTOOLS_Htcpservertools.cpp #include tcpservertools.hTcpServerTools::TcpServerTools(QTcpServer *parent) : QTcpServer(parent){tcpClient new QHashint, TcpSocketTools*;}TcpServerTools::~TcpServerTools(){}bool TcpServerTools::startListen() {//监听连接this-listen(QHostAddress(mIp), mPort.toInt());return true;}void TcpServerTools::closeConnect(){// 断开连接时删除tcpClient中保存的套接字并清除 tcpClientQHashint, TcpSocketTools*::const_iterator iterC tcpClient-constBegin();for (; iterC ! tcpClient-constEnd(); iterC){iterC.value()-deleteLater();}tcpClient-clear();this-close();}void TcpServerTools::incomingConnection(qintptr socketDescriptor) {//创建 TcpSocketTools 对象TcpSocketTools *socketTools new TcpSocketTools(socketDescriptor); QString connAddr socketTools-peerAddress().toString() : QString::number(socketTools-peerPort());// 有新连接时保存socket到 QHashint, TcpSocketTools* 类型的tcpClient指针对象中tcpClient-insert(socketDescriptor, socketTools);}// 设置最大连接数void TcpServerTools::setMaxPendingConnections(int numConnections) {QTcpServer::setMaxPendingConnections(numConnections);}tcpsockettools.h #ifndef TCPSOCKETTOOLS_H#define TCPSOCKETTOOLS_H#include QTcpSocketclass TcpSocketTools : public QTcpSocket{Q_OBJECTpublic:explicit TcpSocketTools(qintptr socketDescriptor, QTcpSocket *parent 0);~TcpSocketTools();public slots :void onReadyRead();void onDisconnected();private:qintptr socketID;};#endif // TCPSOCKETTOOLS_Htcpsockettools.cpp #include tcpsockettools.h#include QHostAddressTcpSocketTools::TcpSocketTools(qintptr socketDescriptor, QTcpSocket *parent) : QTcpSocket(parent),socketID(socketDescriptor){this-setSocketDescriptor(socketDescriptor);connect(this, TcpSocketTools::readyRead, this, TcpSocketTools::onReadyRead);connect(this, TcpSocketTools::disconnected, this, TcpSocketTools::onDisconnected);}TcpSocketTools::~TcpSocketTools(){}void TcpSocketTools::onReadyRead() {//处理接受到的数据} void TcpSocketTools::onDisconnected() {//处理断开连接请求}
http://www.dnsts.com.cn/news/171451.html

相关文章:

  • 做网站开发语言重庆网网站建设公司
  • 怎么做淘宝网站赚钱吗百度指数排名
  • 做自媒体一般都注册几个网站长链接缩短在线生成
  • 微网站怎么注册账号wordpress导出数据
  • 个人做网站的流程互助网站开发
  • 律师事务所网站设计方案wordpress企业电商主题排行榜
  • 小的电商网站网站右下角图片广告代码
  • iphone做网站服务器基于网站的app开发
  • 网站关键词突然搜不到wordpress彩色字体
  • 网站框架设计好后怎么做河南公司网站建设
  • 江苏做网站公司排名外贸商城网站开发书
  • opkg 做网站的包叫什么名字网页qq空间登陆在线登录入口
  • 网站建设dw站点建设产品vi设计哪家好
  • 网站seo提升爱心捐赠网站怎么做
  • 关于网站建设的策划案网站开发一般做几个适配
  • 哈尔滨优化网站排名优秀甜品网站
  • 两人合伙做网站但不准备开公司网站建设 精品课程
  • 做展示网站wordpress这么写一个api
  • 十大软件免费下载网站排行榜网站空间为什么都比数据库大
  • 唐山手机网站建设wordpress 设置导航栏
  • 个人网站的设计与实现结论触屏版网站设计
  • lol做直播网站网站设计的主要内容
  • 找深圳网站建设logo设计免费平台
  • 金溪做网站西安做北郊做网站
  • 做企业网站的字体大小要求微信分销网站建设
  • 做租人网站犯法吗祖传做网站
  • 深圳网站设计与制作公司紧急大通知请记住新域名
  • 搭建一个商城类网站做网站海口
  • 免费建站建站南海最新军事新闻
  • as3 xml 网站模板 下载怎么架设一个网站