中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

蕪湖做網(wǎng)站哪個(gè)公司好快速收錄網(wǎng)

蕪湖做網(wǎng)站哪個(gè)公司好,快速收錄網(wǎng),wordpress 修改語(yǔ)言,服務(wù)器怎么限制ip訪問(wèn)網(wǎng)站嗎簡(jiǎn)介 軟件開(kāi)發(fā)中,可能經(jīng)常會(huì)用到TCP調(diào)試工具。本人使用QT開(kāi)發(fā)了一款TCP調(diào)試工具,方便大家使用。本文章主要介紹下,該工具的功能,以及如何在Qt中實(shí)現(xiàn)TCP服務(wù)器的并發(fā)。 界面展示 安裝界面 桌面圖標(biāo)。安裝后會(huì)生成桌面圖標(biāo)&#…

簡(jiǎn)介

  • 軟件開(kāi)發(fā)中,可能經(jīng)常會(huì)用到TCP調(diào)試工具。本人使用QT開(kāi)發(fā)了一款TCP調(diào)試工具,方便大家使用。本文章主要介紹下,該工具的功能,以及如何在Qt中實(shí)現(xiàn)TCP服務(wù)器的并發(fā)。

界面展示

  • 安裝界面
    在這里插入圖片描述
  • 桌面圖標(biāo)。安裝后會(huì)生成桌面圖標(biāo),雙擊圖標(biāo)可以打開(kāi)程序。
    在這里插入圖片描述
  • 界面展示
    在這里插入圖片描述

功能說(shuō)明

  • 本程序使用Qt實(shí)現(xiàn)了TCP客戶端和服務(wù)端,服務(wù)端并發(fā)數(shù)默認(rèn)為100,可配置??蛻舳诉B接后,可以在服務(wù)端看到連接的客戶端信息,服務(wù)端可以指定給某一個(gè)客戶端發(fā)送消息。
  • 服務(wù)端不支持廣播,后續(xù)版本會(huì)完善。

軟件下載

  • 本程序已經(jīng)制作成安裝包形式,下載安裝后可直接使用。
  • gitee下載
  • CSDN資源下載

Qt實(shí)現(xiàn)服務(wù)端并發(fā)

  • Qt實(shí)現(xiàn)服務(wù)端多并發(fā)時(shí),可以實(shí)現(xiàn)一個(gè)類 TcpServerTools,該類需要繼承于 QTcpServer,然后重寫以下兩個(gè)函數(shù)
  • void setMaxPendingConnections(int numConnections);
    • 該函數(shù)設(shè)置服務(wù)端最大連接數(shù)
  • void incomingConnection(qintptr socketDescriptor);
    • 當(dāng)有新連接時(shí),會(huì)觸發(fā)該函數(shù),我們需要在該函數(shù)中,將套接字保存起來(lái)。可以將套接字保存到一個(gè)Hash中 QHash<int, TcpSocketTools*>

核心源代碼

  • 這里只提供了服務(wù)端實(shí)現(xiàn)并發(fā)的核心源代碼,主要有三個(gè)文件:

    • networkdebugtools.cpp 為主界面文件,實(shí)現(xiàn)UI交互。
    • tcpservertools.cpp 主要實(shí)現(xiàn)接受客戶端連接請(qǐng)求,保存套接字到hash容器中。
    • tcpsockettools.cpp 中主要實(shí)現(xiàn)處理客戶端數(shù)據(jù)和斷開(kāi)請(qǐng)求。
  • 三者之間可以自己定義信號(hào)槽實(shí)現(xiàn)通信,整體源代碼不提供,請(qǐng)諒解。

  • networkdebugtools.h

  •   #ifndef NETWORKDEBUGTOOLS_H#define NETWORKDEBUGTOOLS_H#include <QWidget>#include <QEvent>#include <QMouseEvent>#include <QMenu>#include "tcpservertools.h"#include <map>QT_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_H
    
  • networkdebugtools.cpp

  •   #include "networkdebugtools.h"#include "ui_networkdebugtools.h"#include <QMessageBox>#include <QHostInfo>#include <QTableWidgetItem>NetworkDebugTools::NetworkDebugTools(QWidget *parent): QWidget(parent), ui(new Ui::NetworkDebugTools){ui->setupUi(this);mTcpServerTools = new TcpServerTools();}void NetworkDebugTools::on_pushButton_send_clicked(){//獲取當(dāng)前選中的客戶端信息QString curAddr = ui->tableWidget_clientInfo->item(curRow, 0)->text();QHash<int, 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,可以直接通過(guò)socket給客戶端發(fā)送數(shù)據(jù)//同樣可以通過(guò)該socket獲取客戶端的ip和端口,然后與我們點(diǎn)擊的客戶端信息比對(duì),就可以實(shí)現(xiàn)對(duì)指定客戶端發(fā)送消息iter.value()->write(ui->plainTextEdit_send->toPlainText().toLocal8Bit());break;}}}void NetworkDebugTools::on_pushButton_listen_clicked(){if (ui->pushButton_listen->text().compare("監(jiān)聽(tīng)") == 0) {ui->pushButton_listen->setText("關(guān)閉");mTcpServerTools->setMaxPendingConnections(mConfigTools->getConnCount());mTcpServerTools->startListen();}else {ui->pushButton_listen->setText("監(jiān)聽(tīng)");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();//開(kāi)始監(jiān)聽(tīng)bool startListen();//關(guān)閉連接void closeConnect();//設(shè)置最大連接數(shù)void setMaxPendingConnections(int numConnections);protected:// 有新連接到來(lái)時(shí),該函數(shù)會(huì)被觸發(fā)void incomingConnection(qintptr socketDescriptor);private:QTcpServer *mTcpServer;   //tcp服務(wù)對(duì)象public:QHash<int, TcpSocketTools*> *tcpClient;// 該對(duì)象中保存套接字};#endif // TCPSERVERTOOLS_H
    
  • tcpservertools.cpp

  •   #include "tcpservertools.h"TcpServerTools::TcpServerTools(QTcpServer *parent) : QTcpServer(parent){tcpClient = new  QHash<int, TcpSocketTools*>;}TcpServerTools::~TcpServerTools(){}bool TcpServerTools::startListen() {//監(jiān)聽(tīng)連接this->listen(QHostAddress(mIp), mPort.toInt());return true;}void TcpServerTools::closeConnect(){// 斷開(kāi)連接時(shí),刪除tcpClient中保存的套接字,并清除 tcpClientQHash<int, TcpSocketTools*>::const_iterator iterC = tcpClient->constBegin();for (; iterC != tcpClient->constEnd(); iterC++){iterC.value()->deleteLater();}tcpClient->clear();this->close();}void TcpServerTools::incomingConnection(qintptr socketDescriptor) {//創(chuàng)建 TcpSocketTools 對(duì)象TcpSocketTools *socketTools = new TcpSocketTools(socketDescriptor);	QString connAddr = socketTools->peerAddress().toString() + ":" + QString::number(socketTools->peerPort());// 有新連接時(shí),保存socket到 QHash<int, TcpSocketTools*> 類型的tcpClient指針對(duì)象中tcpClient->insert(socketDescriptor, socketTools);}// 設(shè)置最大連接數(shù)void TcpServerTools::setMaxPendingConnections(int numConnections) {QTcpServer::setMaxPendingConnections(numConnections);}
    
  • tcpsockettools.h

  •   #ifndef TCPSOCKETTOOLS_H#define TCPSOCKETTOOLS_H#include <QTcpSocket>class TcpSocketTools : public QTcpSocket{Q_OBJECTpublic:explicit TcpSocketTools(qintptr socketDescriptor, QTcpSocket *parent = 0);~TcpSocketTools();public slots :void onReadyRead();void onDisconnected();private:qintptr socketID;};#endif // TCPSOCKETTOOLS_H
    
  • tcpsockettools.cpp

  •   #include "tcpsockettools.h"#include <QHostAddress>TcpSocketTools::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() {//處理接受到的數(shù)據(jù)}	void TcpSocketTools::onDisconnected() {//處理斷開(kāi)連接請(qǐng)求}
    
http://m.risenshineclean.com/news/61977.html

相關(guān)文章:

  • 寧波網(wǎng)站建設(shè)公司費(fèi)用價(jià)格百度競(jìng)價(jià)推廣有哪些優(yōu)勢(shì)
  • 軟件b2c網(wǎng)站建設(shè)網(wǎng)頁(yè)開(kāi)發(fā)
  • 網(wǎng)站開(kāi)發(fā)最好用什么軟件公司網(wǎng)頁(yè)設(shè)計(jì)
  • 現(xiàn)在淘客做網(wǎng)站還行嗎軟件推廣平臺(tái)有哪些
  • 做網(wǎng)站銷售的話術(shù)app推廣軟件
  • b2b外貿(mào)網(wǎng)站南昌seo技術(shù)外包
  • 手機(jī)做推廣比較好的網(wǎng)站2024年重大政治時(shí)事匯總
  • 企業(yè)查天眼查官網(wǎng)福州seo技術(shù)培訓(xùn)
  • 網(wǎng)站開(kāi)發(fā)畢設(shè)答辯如何seo推廣
  • 淘寶做問(wèn)卷的網(wǎng)站好seo如何優(yōu)化
  • 圖片搜集網(wǎng)站怎么做2345網(wǎng)址中國(guó)最好
  • 畢設(shè)做網(wǎng)站答辯稿百度免費(fèi)資源網(wǎng)站
  • 工商注冊(cè)網(wǎng)寧波seo入門教程
  • 本網(wǎng)站建設(shè)在美國(guó)數(shù)據(jù)網(wǎng)站
  • 3g開(kāi)發(fā)網(wǎng)站seo sem推廣
  • 可以做設(shè)計(jì)兼職的網(wǎng)站有哪些工作網(wǎng)絡(luò)營(yíng)銷步驟
  • 如何看別人網(wǎng)站用什么做的網(wǎng)站首頁(yè)制作網(wǎng)站
  • 織夢(mèng)網(wǎng)站一級(jí)目錄十大少兒編程教育品牌
  • 智能家居型網(wǎng)站開(kāi)發(fā)廣安百度推廣代理商
  • seo網(wǎng)站買電腦速成班短期電腦培訓(xùn)班
  • 購(gòu)物幫做特惠的網(wǎng)站最簡(jiǎn)單的網(wǎng)頁(yè)制作
  • 如何優(yōu)化公司的網(wǎng)站熱搜榜百度
  • 視頻網(wǎng)站可以做B2C模式嗎網(wǎng)站自然優(yōu)化
  • 新疆烏魯木齊醫(yī)院網(wǎng)站建設(shè)東莞網(wǎng)絡(luò)推廣營(yíng)銷
  • 給小公司做網(wǎng)站賺錢么江西seo推廣
  • 西寧做腋臭北大網(wǎng)站lseo排名快速刷
  • 怎么做網(wǎng)站超鏈接外媒頭條最新消息
  • 手機(jī)視頻網(wǎng)站開(kāi)發(fā)廠房網(wǎng)絡(luò)推廣平臺(tái)
  • 深圳龍崗做網(wǎng)站公司哪家好seo排名首頁(yè)
  • 網(wǎng)站界面設(shè)計(jì)總結(jié)活動(dòng)策劃