QT 使用QUdpSocket QUdpServer UDP 建立客户端与服务器端
1. 模拟天气监控,每隔两秒从Server发送天气信息到Client.
2. 示例代码
--------------------------- Server 端 -------------------------------------
修改工程文件.pro , QT += network, 添加net模块
udpsend.h
#ifndef UDPSEND_H
#define UDPSEND_H #include <QWidget>
#include <QtGui>
#include <QtNetwork> class udpSend : public QPushButton //继承自QPushButton 双击退出
{
Q_OBJECT public:
udpSend(QWidget *parent = 0);
~udpSend(); private slots:
void sendDatagram(); private:
QUdpSocket udpSocket;
QTimer timer;
}; #endif // UDPSEND_H
udpsend.cpp
#include "udpsend.h" udpSend::udpSend(QWidget *parent)
: QPushButton(tr("clicked, quit"),parent)
{
connect(this, SIGNAL(clicked()), this, SLOT(close()));
connect(&timer, SIGNAL(timeout()), this, SLOT(sendDatagram())); //定时发送 timer.start(2000);
setSizeIncrement(100,100);
setWindowTitle(tr("Weather Balloon"));
} udpSend::~udpSend()
{
} void udpSend::sendDatagram()
{
QByteArray datagram;
QDataStream out(&datagram, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_7);
out << QDateTime::currentDateTime() << qrand()/10000000.0 << qrand()/10000000.0 << qrand()/10000000.0 ;
//发送主机可以用QHostAddress("127.0.0.1")替换
udpSocket.writeDatagram(datagram, QHostAddress::LocalHost, 13999); // UDP 发送数据
}
------------------------------- Client 端 ------------------------------------
udpclient.h
#ifndef UDPCLIENT_H
#define UDPCLIENT_H #include <QDialog>
#include <QtNetwork>
#include <QtGui> class udpClient : public QDialog
{
Q_OBJECT public:
udpClient(QWidget *parent = 0);
~udpClient(); private slots:
void processPendingDatagrams(); private:
QUdpSocket udpSocket; QLabel *dateLabel;
QLabel *timeLabel;
QLabel *tempLabel;
QLabel *humLabel;
QLabel *altiLabel;
QLineEdit *dateEdit;
QLineEdit *timeEdit;
QLineEdit *tempEdit;
QLineEdit *humEdit;
QLineEdit *altiEdit;
}; #endif // UDPCLIENT_H
udpclient.cpp
#include "udpclient.h" udpClient::udpClient(QWidget *parent)
: QDialog(parent)
{
udpSocket.bind(13999); //建立监听
connect(&udpSocket, SIGNAL(readyRead()), this, SLOT(processPendingDatagrams())); //接收准备 dateLabel = new QLabel(tr("Date"));
timeLabel = new QLabel(tr("Time"));
tempLabel = new QLabel(tr("Temp"));
humLabel = new QLabel(tr("Hum"));
altiLabel = new QLabel(tr("Alti"));
dateEdit = new QLineEdit();
timeEdit = new QLineEdit();
tempEdit = new QLineEdit();
humEdit = new QLineEdit();
altiEdit = new QLineEdit(); QGridLayout *gLayout = new QGridLayout;
gLayout->addWidget(dateLabel, 0, 0);
gLayout->addWidget(dateEdit, 0, 1);
gLayout->addWidget(timeLabel, 1, 0);
gLayout->addWidget(timeEdit, 1, 1);
gLayout->addWidget(tempLabel, 2, 0);
gLayout->addWidget(tempEdit, 2, 1);
gLayout->addWidget(humLabel, 3, 0);
gLayout->addWidget(humEdit, 3, 1);
gLayout->addWidget(altiLabel, 4, 0);
gLayout->addWidget(altiEdit, 4, 1); setLayout(gLayout); } udpClient::~udpClient()
{
} void udpClient::processPendingDatagrams()
{
QByteArray datagram;
do{
datagram.resize(udpSocket.pendingDatagramSize());
udpSocket.readDatagram(datagram.data(), datagram.size()); //接收数据
}while( udpSocket.hasPendingDatagrams() ); QDateTime dateTime;
double temperature;
double humidity;
double altitude; QDataStream in(&datagram, QIODevice::ReadOnly);
in.setVersion(QDataStream::Qt_4_7);
in >> dateTime >> temperature >> humidity >> altitude; dateEdit->setText(dateTime.date().toString());
timeEdit->setText(dateTime.time().toString());
tempEdit->setText(tr("%1 C").arg(temperature));
humEdit->setText(tr("%1 %").arg(humidity));
altiEdit->setText(tr("%1 m").arg(altitude)); }
QT 使用QUdpSocket QUdpServer UDP 建立客户端与服务器端的更多相关文章
- C/S模型:TCP,UDP构建客户端和服务器端(BIO实现
Java中提供了socket编程来构建客户端和服务器端 TCP构建服务器端的步骤:(1)bind:绑定端口号(2)listen:监听客户端的连接请求(3)accept:返回和客户端连接的实例(4)re ...
- 基于UDP的客户端和服务器端的代码设计
实验平台 linux 实验内容 编写UDP服务器和客户端程序,客户端发送消息,服务器接收消息,并打印客户端的IP地址和端口号. 实验原理 UDP是无需连接的通信,其主要实现过程如下: 同样,我们可以按 ...
- Qt实现网络聊天室(客户端,服务端)
1. 效果演示 客户端 服务器 连接成功之后 2. 预备知识 如果不知道网络编程的可以去看我的上一篇文章C++网络编程 在Qt中,实现网络编程的方式比用C++或C实现要方便简单许多,因为Qt已经替我们 ...
- paip.c++ qt 共享库dll的建立
paip.c++ qt 共享库dll的建立 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/at ...
- QT在ui文件上建立信号操机制会不会对后期维护产生影响 - love4Mario的专栏 - 博客频道 - CSDN.NETQT在ui文件上建立信号操机制会不会对后期维护产生影响 - love4Mario的专栏 - 博客频道 - CSDN.NET
QT在ui文件上建立信号操机制会不会对后期维护产生影响 - love4Mario的专栏 - 博客频道 - CSDN.NET QT在ui文件上建立信号操机制会不会对后期维护产生影响 分类: 学习心得 2 ...
- 6-1 建立客户端与zk服务端的连接
6-1 建立客户端与zk服务端的连接 zookeeper原生java api使用 会话连接与恢复; 节点的增删改查; watch与acl的相关操作; 导入jar包;
- 浅析Java web程序之客户端和服务器端交互原理(转)
转载自http://www.cnblogs.com/lys_013/archive/2012/05/05/2484561.html 1. 协议 a. TCP/IP整体构架概述 TCP/IP协议并不完全 ...
- [转]HTTP报文接口及客户端和服务器端交互原理
1. 协议 a. TCP/IP整体构架概述 TCP/IP协议并不完全符合OSI的七层参考模型.传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务.该模型的目的 ...
- 浅析Java web程序之客户端和服务器端交互原理
原文链接: https://www.iteye.com/topic/470019 1. 协议 a. TCP/IP整体构架概述 TCP/IP协议并不完全符合OSI的七层参考模型.传统的开放式系统互连参考 ...
随机推荐
- [转]Linux进程通信之POSIX消息队列
进程间的消息队列可以用这个实现,学习了下. http://blog.csdn.net/anonymalias/article/details/9799645?utm_source=tuicool&am ...
- 【BZOJ4817】[Sdoi2017]树点涂色 LCT+线段树
[BZOJ4817][Sdoi2017]树点涂色 Description Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路径的权值是:这条路 ...
- 《从零开始学Swift》学习笔记(Day 29)——访问级别
Swift 2.0学习笔记(Day 29)——访问级别 原创文章,欢迎转载.转载请注明:关东升的博客 访问级别: Swift提供了3种不同访问级别,对应的访问修饰符为:public.internal和 ...
- grafana零散模块点记录(share,setting,datasourse)
一.Settings 1.General Details Name:当前doshboard名称 Description Tags:当前doshboard设置tag,输入完成是,点击“Enter”才能完 ...
- docker logspout
https://hub.docker.com/r/jplock/rsyslog/ docker pull jplock/rsyslog:8.2.2 docker run -d -p 514:514 j ...
- Webstorm如何设置背景色为护眼色(豆绿色)
本文主要讲webstorm如何设置背景色. 1.打开idea Settings 选择 Editor——Color Scheme——General 注意:如果是Mac,在webstorm界面按键:“co ...
- testlink1.9.3测试管理工具安装
一.下载testlink1.9.3rar安装包 下载地址:http://download.csdn.net/download/u010082992/7678491 二.安装IIS 在Server 20 ...
- PyQt4 调用串口API pySerial API说明
pySerial API官方介绍链接 http://pyserial.readthedocs.io/en/latest/pyserial_api.html
- driver.close()和driver.quit()
driver.close()关闭当前窗口 driver.quit()退出驱动关闭所有窗口 from selenium import webdriver from time import sleep d ...
- SourceTree的基本使用---基本介绍/本地开发
转载自https://www.cnblogs.com/tian-xie/p/6264104.html 1. SourceTree是什么 拥有可视化界面的项目版本控制软件,适用于git项目管理 wind ...