qt5多线程扫描器帮助!!!!!

大家好!我是新手,提一个问题!如何实现控制台的多线程端口扫描器。
我已经完成了单线程扫描器。
看了众多实现多线程的文章,有
1重写run的。
2 有继承QObject的。
但目前还是毫无头绪,经常出现无法解决问题,希望给与明晰的回答!
谢谢各位大神了

//头文件 scan.h
#ifndef SCAN_H
#define SCAN_H
#include <QString>
#include <QList>
#include <QDebug>
#include <QTcpSocket>
void scan( QString ad,int sp,int ep)
{
//连接并验证端口是否打开
QTcpSocket connct;
int temp=sp;
QList<int> list;//保存扫描结果
for(;temp<=ep;temp++)
{

   connct.connectToHost(ad,temp);

    if(connct.waitForConnected(100))
        {
         list.append(temp);
         qDebug()<<"address--"<<ad<<":"<<temp<<"open!"<<endl;
    }else{
        qDebug()<<"address--"<<ad<<":"<<temp<<"close!"<<endl;

    }
    connct.abort();//断开连接

}
qDebug()<<"address--"<<ad<<":"<<"Finish!"<<endl;
qDebug()<<"open-port:"<<list<<endl;
}
#endif // SCAN_H
//主程序 main.cpp
#include <QCoreApplication>
#include <QDebug>
#include <QTcpSocket>
#include <iostream>
#include<QTextStream>
#include <QHostInfo>
#include "scan.h"
int main(int argc,char* argv[ ])
{
    QCoreApplication a(argc,argv);
    //为了QT使用c++标准输入输出
    QTextStream cin(stdin, QIODevice::ReadOnly);
    QTextStream cout(stdout, QIODevice::WriteOnly);
    //地址和端口号
    int sport,eport,num;
    QString address,name;
    QHostInfo adsname;
    cout<<"#################################################"<<endl;
    cout<<"#################################################"<<endl;
    cout<<"######PortScanner###Ver 1.0######################"<<endl;
    cout<<"########################Power by JudeMoses#######"<<endl;
    cout<<"#################################################"<<endl;
    cout<<"#################################################"<<endl;
while(1){
    cout<<"#please input a number (1:IP 2:website name)#####"<<endl;
    cin>>num;
    switch (num)
    {
    case 1:
        cout<<"IP?"<<endl;
        cin>>address;
        cout<<"IP--"<<address<<endl;
        cout<<"Start Port?"<<endl;
        cin>>sport;
        cout<<"End Port?"<<endl;
        cin>>eport;
        cout<<"Start-port--"<<sport<<endl;
        cout<<"End---port--"<<eport<<endl;
        scan (address,sport,eport);
        break;

    case 2:

        cout<<"website name?"<<endl;
        cin>>name;

        adsname = QHostInfo::fromName(name);
        address=adsname.addresses().first().toString();
        cout<<"IP--"<<address<<endl;
        cout<<"Start Port?"<<endl;
        cin>>sport;
        cout<<"End Port?"<<endl;
        cin>>eport;
        cout<<"Start-port--"<<sport<<endl;
        cout<<"End---port--"<<eport<<endl;
        scan (address,sport,eport);
        break;

     default:
        cout<<"#######WARNING###################################"<<endl;
        cout<<"#######WARNING###################################"<<endl;
        cout<<"#######WARNING###################################"<<endl;
      break;
    }
}
   a.exec();

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值