首页 > 代码库 > qt实现搜索LAN设备
qt实现搜索LAN设备
先看效果:
代码上:
Work.cpp
#include <QApplication> #include <QTableWidget> #include <QTableWidgetItem> #include <QVBoxLayout> #include "Work.h" #include "P2PSearchProtocol.h" #include <QTextStream> MyQPushButton *pQPushButton; int main(int argc, char *argv[]) { QApplication a(argc, argv); QWidget *pQWidget = new QWidget; pQWidget->setWindowTitle("LAN Devices"); pQWidget->resize(450, 200); pQPushButton = new MyQPushButton(); pQPushButton->setText("Search"); QObject::connect( pQPushButton,SIGNAL(clicked()),pQPushButton,SLOT(HandleButton()) ); QTableWidget *pQTableWidget = new QTableWidget; pQTableWidget->setColumnCount(3); pQTableWidget->setRowCount(10); pQTableWidget->resize(400, 200); QStringList header; header<<"ID"<<"Name"<<"IP"; pQTableWidget->setHorizontalHeaderLabels(header); //pQTableWidget->setItem(0,0,new QTableWidgetItem("Jan")); //pQTableWidget->setItem(1,0,new QTableWidgetItem("Feb")); //pQTableWidget->setItem(2,0,new QTableWidgetItem("Mar")); QVBoxLayout *pQVBoxLayout = new QVBoxLayout; pQVBoxLayout->addWidget(pQPushButton); pQVBoxLayout->addWidget(pQTableWidget); pQPushButton->m_pQTableWidget=pQTableWidget; pQPushButton->m_pQWidget=pQWidget; pQWidget->setLayout(pQVBoxLayout); pQWidget->show(); return a.exec(); }
Work.h
#include <QPushButton> #include <QMessageBox> #include <string> #include <SSTREAM> #include <process.h> #include <QDebug> #include <QFile> #include <QTextStream> #include <QtNetwork> #include <QtNetwork/qudpsocket.h> #include <QtNetwork/qhostaddress.h> #include <QTableWidget> #include <QTableWidgetItem> #include <QWidget> #include <vector> #include "P2PSearchProtocol.h" typedef unsigned int (__stdcall *FuncThread)(void *); class MyQPushButton:public QPushButton { Q_OBJECT public: std::vector<PSEARCH_RESP*> m_vtRelt; QTableWidget* m_pQTableWidget; QWidget* m_pQWidget; QString m_qstrIP; public slots: void HandleButton() { //QMessageBox::about( 0, "Invoke Starting", "Invoke Starting..."); unsigned ulThreadId; void * hThreadProc= (void *)_beginthreadex(NULL,0,(FuncThread)ThreadProc,this,0,&ulThreadId); if(NULL==hThreadProc) { QMessageBox::about( 0, "Thread Failed", "Creating the thread failed!"); return; } QUdpSocket* pQUdpSocket=new QUdpSocket(); QHostAddress* host=new QHostAddress("192.168.0.114"); //pQUdpSocket->bind(*host,BROADCAST_SEND_PORT_L); QList<QHostAddress> list = QNetworkInterface::allAddresses(); for(int nIter=0; nIter<list.count(); nIter++) { //if(!list[nIter].isLoopback()) if (list[nIter].protocol() == QAbstractSocket::IPv4Protocol ) { m_qstrIP=list[nIter].toString(); m_pQWidget->setWindowTitle( "LAN Devices --- Your IP : "+ m_qstrIP ); host=new QHostAddress( m_qstrIP ); //QMessageBox::about( 0, "Your IP", m_qstrIP ); pQUdpSocket->bind(*host,BROADCAST_SEND_PORT_L); break; } } pQUdpSocket->bind(QHostAddress::LocalHost, BROADCAST_SEND_PORT_L); SEARCH_REQ req={STARTCODE,CMD_GET}; QByteArray datagram = (char*)&req;//"Broadcast message : Hello" + QByteArray::number(123); pQUdpSocket->writeDatagram(datagram.data(), datagram.size(), QHostAddress::Broadcast, BROADCAST_SEND_PORT_L); QMessageBox::about( 0, "Send The Data", QString( "Sending Over" ) ); int index=0; while(pQUdpSocket->hasPendingDatagrams()) { QByteArray datagramRecv; datagramRecv.resize(pQUdpSocket->pendingDatagramSize()); QHostAddress sender; quint16 senderPort; pQUdpSocket->readDatagram(datagramRecv.data(), datagramRecv.size(), &sender, &senderPort); int row_count=m_pQTableWidget->rowCount(); if(row_count<index+1) m_pQTableWidget->setRowCount(row_count+10); PSEARCH_RESP ptr=(PSEARCH_RESP)datagramRecv.data(); if( sender.toString()==QString(m_qstrIP) ) { //QMessageBox::about( 0, "Sender", QString::number( strlen(ptr->dwDeviceID) ) ); continue; } m_pQTableWidget->setItem(index,2,new QTableWidgetItem( sender.toString() )); m_pQTableWidget->setItem(index,1,new QTableWidgetItem( QString(‘L‘) )); m_pQTableWidget->setItem(index,0,new QTableWidgetItem( QString(QLatin1String( ptr->dwDeviceID )) )); index++; } QMessageBox::about( 0, "Receive The Data", QString( "Receiving Over" ) ); } private: static unsigned long __stdcall ThreadProc(void* pParam) { /* MyQPushButton* pMyQPushButton=(MyQPushButton*)pParam; QUdpSocket* pQUdpSocket=new QUdpSocket(); QHostAddress* host=new QHostAddress("192.168.0.114"); //pQUdpSocket->bind(QHostAddress::LocalHost, 7756); pQUdpSocket->bind(*host,BROADCAST_SEND_PORT_L); SEARCH_REQ req={STARTCODE,CMD_GET}; QByteArray datagram = (char*)&req;//"Broadcast message : Hello" + QByteArray::number(123); pQUdpSocket->writeDatagram(datagram.data(), datagram.size(), QHostAddress::Broadcast, BROADCAST_SEND_PORT_L); for(int i=0;i<5000;i++); int index=0; while(pQUdpSocket->hasPendingDatagrams()) { QByteArray datagramRecv; datagramRecv.resize(pQUdpSocket->pendingDatagramSize()); QHostAddress sender; quint16 senderPort; pQUdpSocket->readDatagram(datagramRecv.data(), datagramRecv.size(), &sender, &senderPort); int row_count=pMyQPushButton->m_pQTableWidget->rowCount(); if(row_count<index+1) pMyQPushButton->m_pQTableWidget->setRowCount(row_count+10); PSEARCH_RESP ptr=(PSEARCH_RESP)datagramRecv.data(); if( sender.toString()==QString("192.168.0.114") ) { //QMessageBox::about( 0, "Sender", QString::number( strlen(ptr->dwDeviceID) ) ); continue; } pMyQPushButton->m_pQTableWidget->setItem(index,2,new QTableWidgetItem( sender.toString() )); pMyQPushButton->m_pQTableWidget->setItem(index,1,new QTableWidgetItem( QString(‘L‘) )); pMyQPushButton->m_pQTableWidget->setItem(index,0,new QTableWidgetItem( QString(QLatin1String( ptr->dwDeviceID )) )); index++; } */ return 0; } };
Compile_nmake.bat
D:
cd D:\Work\0529
qmake -project
qmake "QT += core network"
moc Work.h -o moc_Work.cpp
nmake
pause
环境:
vc6+qt-win-opensource-src-4.3.4.zip
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。