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

网站设计工具更好的做网站无锡网红餐厅

网站设计工具更好的做网站,无锡网红餐厅,jquery动画特效网站,嘉兴建站模板测试环境 本文选用pc1作为客户端,pc2,以及一台虚拟机作为服务端。 pc1,pc2(客户端): 虚拟机(服务端): 客户端 原理:客户端通过发送广播消息信息到ip:255.255.255.255(QHostAddress::Broadcast),局域网…

测试环境

本文选用pc1作为客户端,pc2,以及一台虚拟机作为服务端

  • pc1,pc2(客户端):
    在这里插入图片描述
  • 虚拟机(服务端):
    在这里插入图片描述

客户端

  • 原理:客户端通过发送广播消息信息到ip:255.255.255.255(QHostAddress::Broadcast),局域网内的所有设备收到该消息回复客户端即可。客户端通过收到的回复统计当前有哪些设备在线
  • 获取到本地的IP,getLocalIP函数获取到过滤了虚拟机网卡以及本地回环网卡后的ip地址。
    在这里插入图片描述
#include "udpclient.h"
#include <QDebug>
#include <QHostInfo>
#include <QNetworkInterface>
#include <iostream>udpClient::udpClient(QObject *parent) : QObject(parent)
{QString localIp = getLocalIP();udpSocket = new QUdpSocket;udpSocket->bind(QHostAddress(localIp),2001);connect(udpSocket,&QUdpSocket::readyRead,this,&udpClient::processData);}QString udpClient::getLocalIP() {QList<QNetworkInterface> interfaces = QNetworkInterface::allInterfaces();foreach (const QNetworkInterface &interface, interfaces) {QList<QNetworkAddressEntry> entries = interface.addressEntries();qDebug()<<"name:"<<interface.humanReadableName()<<endl;if(interface.humanReadableName().contains("Loopback") ||interface.humanReadableName().contains("VMware Network Adapter")){continue;}foreach (const QNetworkAddressEntry &entry, entries) {if (entry.ip().protocol() == QAbstractSocket::IPv4Protocol) {qDebug() << "Local IP Address: " << entry.ip().toString()<< endl;}}}return QString();
}udpClient::~udpClient()
{if(udpSocket){delete udpSocket;}
}void udpClient::sendBroadCast()
{QByteArray datagram = "Device Discovery";udpSocket->writeDatagram(datagram,QHostAddress::Broadcast,8888);
}void udpClient::processData()
{while(udpSocket->hasPendingDatagrams()){QByteArray datagram;datagram.resize(udpSocket->pendingDatagramSize());QHostAddress sender;quint16 senderPort;udpSocket->readDatagram(datagram.data(), datagram.size(), &sender, &senderPort);qDebug() << "Received response from: " << sender.toString()<<"port:"<<senderPort << endl;}
}

服务端

#include "udpserver.h"
#include <iostream>udpServer::udpServer(QObject *parent) : QObject(parent)
{udpSocket = new QUdpSocket(this);udpSocket->bind(QHostAddress::Any, 8888);connect(udpSocket, &QUdpSocket::readyRead, this, &udpServer::processPendingDatagrams);}void udpServer::processPendingDatagrams()
{while (udpSocket->hasPendingDatagrams()) {QByteArray datagram;datagram.resize(udpSocket->pendingDatagramSize());QHostAddress sender;quint16 senderPort;udpSocket->readDatagram(datagram.data(), datagram.size(), &sender, &senderPort);std::cout << "Received discovery message: " << datagram.data() << std::endl;QByteArray response = "Device Found";udpSocket->writeDatagram(response, sender, senderPort);}
}

输出效果

在这里插入图片描述
在这里插入图片描述

优化

  • 对客户端增加定时器,同时将客户端对象移动到一个线程中,这样就可以定时轮询设备发现了。
#include "udpclient.h"
#include <QDebug>
#include <QHostInfo>
#include <QNetworkInterface>
#include <iostream>
#include <QTimer>
#include <QThread>udpClient::udpClient(QObject *parent) : QObject(parent)
{qDebug()<<"thread id1:"<<QThread::currentThreadId()<<endl;
}void udpClient::createSocket()
{qDebug()<<"thread id2:"<<QThread::currentThreadId()<<endl;QString localIp = getLocalIP();udpSocket = new QUdpSocket;udpSocket->bind(QHostAddress(localIp),2001);connect(udpSocket,&QUdpSocket::readyRead,this,&udpClient::processData);
}QString udpClient::getLocalIP() {QList<QNetworkInterface> interfaces = QNetworkInterface::allInterfaces();foreach (const QNetworkInterface &interface, interfaces) {QList<QNetworkAddressEntry> entries = interface.addressEntries();qDebug()<<"name:"<<interface.humanReadableName()<<endl;if(interface.humanReadableName().contains("Loopback") ||interface.humanReadableName().contains("VMware Network Adapter")){continue;}foreach (const QNetworkAddressEntry &entry, entries) {if (entry.ip().protocol() == QAbstractSocket::IPv4Protocol) {qDebug() << "Local IP Address: " << entry.ip().toString()<< endl;}}}return QString();
}udpClient::~udpClient()
{if(udpSocket){delete udpSocket;}
}void udpClient::sendBroadCast()
{QByteArray datagram = "Device Discovery";udpSocket->writeDatagram(datagram,QHostAddress::Broadcast,8888);qDebug()<<"sendBroadCast,thread id:"<<QThread::currentThreadId()<<endl;
}void udpClient::processData()
{while(udpSocket->hasPendingDatagrams()){QByteArray datagram;datagram.resize(udpSocket->pendingDatagramSize());QHostAddress sender;quint16 senderPort;udpSocket->readDatagram(datagram.data(), datagram.size(), &sender, &senderPort);result.push_back(IpInfo(sender.toString(),senderPort));qDebug() << "Received response from: " << sender.toString()<<"port:"<<senderPort << endl;}
}void tcpConnect(QString& ip, quint16 port)
{}#include "widget.h"
#include "ui_widget.h"
#include <QTimer>
#include <QEventLoop>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);client = new udpClient;connect(ui->pushButton,&QPushButton::clicked,client,&udpClient::sendBroadCast);thread = new QThread;connect(thread,&QThread::finished,client,&QObject::deleteLater);connect(thread,&QThread::started,client,&udpClient::createSocket);client->moveToThread(thread);timer = new QTimer(this);connect(timer,&QTimer::timeout,client,&udpClient::sendBroadCast);timer->setInterval(500);thread->start();
//    QEventLoop loop;
//    QTimer::singleShot(500,&loop,&QEventLoop::quit);
//    loop.exec();timer->start();qDebug()<<"thread id:"<<QThread::currentThreadId()<<endl;
}Widget::~Widget()
{delete ui;thread->quit();thread->wait();delete thread;thread=nullptr;
}
http://www.laogonggong.com/news/53977.html

相关文章:

  • 建设银行网站招聘官网如何做起一个网站推广
  • 网站logo如何做清晰深圳设计平台
  • 郑州企业网站中国接单外发加工网
  • 阿里云注销网站电商网站建设包括哪些方面
  • 常州网站建设培训公司如何注册企业邮箱
  • 网站建设 架构龙岗网页设计
  • 鲜花网站数据库建设分析做网站网站关键词是什么
  • 网站图片上传功能怎么做苏州网站制作推广
  • 怎么自己做礼品网站谷歌浏览器安卓版
  • wordpress哔哩哔哩廊坊seo公司
  • 某企业集团网站建设方案网站建设服务合同 律师
  • 网站开发维护求职信seo关键词排名优化公司
  • 网站建设的主题企业网络推广方法
  • 有什么网站做的比较高大上旅游网站开发的结论
  • 中铁建设集团门户网站做网站需要什么执照
  • 制作电子商务网站页面域名申请了怎么用
  • 鲤城网站建设推广服务公司注册公司需要交多少税
  • 做投票的网站南京cms建站
  • 什么网站时候做伪静态货代找客户的网站
  • 外贸网站建设 广州wordpress 文章幻灯片
  • 工程施工人员招聘网站北京代理记账公司
  • 怎么样注册网站做建网站
  • 网站开发iis怎么配置网络运维app
  • 怎样制定一个网站建设方案公司做网站需要哪些内容
  • htm网站开发 实训北海做网站哪家好
  • 网站做代练购物类网站都有哪些模块
  • 网站开发ceac证龙岩kk网首页
  • 查大学专业网站网站制作的服务机构
  • 购物网站建设公司产品网站开发流程
  • 温岭市建设局网站审批公示phpcms适合做什么网站