Qt实现搜索LAN设备
来源:互联网 发布:edg那个知恩是谁 编辑:程序博客网 时间:2024/06/02 01:09
代码上:
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; } };
0 0
- Qt实现搜索LAN设备
- 用QT实现Wake On Lan功能(附全部程序源码)
- [Qt] searchBox 搜索框实现
- Android实现wake-on-lan
- lan
- LAN
- Qt for andriod 真机测试搜索不到设备
- 海康、大华设备搜索大概实现原理
- EPON中点到点LAN 和共享LAN仿真的实现
- C实现SSDP协议的设备发现及设备搜索
- ubuntu 12.04 利用openswan实现ipsec vpn(lan-to-lan和host-to-lan)
- Wake On Lan For QT (远程唤醒 QT 版)
- ONVIF 客户端简单实现Discovery,实现设备搜索.
- qt(qu chu biao ti lan /窗口非暴力置顶)
- qt LAN 通讯软件开发 进度 2016.2.4
- ONVIF学习-设备搜索的实现(结合MFC)
- Qt使用Windows蓝牙API搜索蓝牙设备并建立串口服务的方法
- 搜索存储设备
- 归纳与递归
- 笔试题:骰子是一个正方体,每个面有一个数字,初始为左1,右2,前3,后4,上5,下6,用123456表示这个状态,放置在平面上,可以向左翻转(用L表示向左翻转1次);可以向翻转(用R表示向左翻转
- BitmapUtils
- angularjs 学习
- 并集减去交集
- Qt实现搜索LAN设备
- 浅谈JavaScript模拟事件和自定义事件
- 团体程序设计天梯赛-练习集 L2-012关于堆的判断(25分)
- 直接插入排序
- 《剑指Offer》从尾到头打印链表
- 二叉树的遍历
- [PAT][GPLT][CCCC]L1-025.正整数A+B
- 分治与递归
- 【MIT 公开课】Computer Science and Programing Lession 9