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的七层参考模型.传统的开放式系统互连参考 ...
随机推荐
- iOS学习笔记(一)——ios搭建开发环境
好久就想试水IOS开发了,由于开发环境限制,一直局限于理论和虚拟机,近来入手了MacBook Pro,也来尝尝鲜,笔者也是现学现总结,如果有不足,请指正. IOS开发必备MAC OS X 另加一部iP ...
- 标准模板库--STL
标准模板库STL 1.泛型程序设计 C++ 语言的核心优势之一就是便于软件的重用 C++中有两个方面体现重用: 1.面向对象的思想:继承和多态,标准类库 2.泛型程序设计(generic progra ...
- 《从零开始学Swift》学习笔记(Day 6)——哎呀常量和变量都该什么时候用啊?
原创文章,欢迎转载.转载请注明:关东升的博客 使用var还是let? 在我们开发过程中啊什么时候定义关键字为var,还是定义为let呢? 其实啊都能满足我们的需求,那我们到底应该如何选择? 例如:可以 ...
- Reverse and Compare(DP)
Reverse and Compare Time limit : 2sec / Memory limit : 256MB Score : 500 points Problem Statement Yo ...
- 关于微信小程序的尺寸关系
在微信小程序开发中,大家尽量使用rpx为单位, px实际上就是系统级的rem(把页面按比例分割750份,1rpx=window.innerWidth/750),或者scale伸缩布局的width=75 ...
- make tree install 目录树状结构工具安装
http://futeng.iteye.com/blog/2071867 http://zhou123.blog.51cto.com/4355617/1196415 wget ftp://mama.i ...
- 设计一个算法,採用BFS方式输出图G中从顶点u到v的最短路径(不带权的无向连通图G採用邻接表存储)
思想:图G是不带权的无向连通图.一条边的长度计为1,因此,求带顶点u和顶点v的最短的路径即求顶点u和顶点v的边数最少的顶点序列.利用广度优先遍历算法,从u出发进行广度遍历,类似于从顶点u出发一层一层地 ...
- “格式化HDFS后,HMaster进程启动失败”的问题解决
用 hadoop namenode -fromat 格式化后,用./start-hbase.sh 启动HMaster和HRegionServer,但是过几秒种后HMaster进程自动关闭,HRegio ...
- 002-基本业务搭建【日志,工具类dbutils,dbcp等使用】
一.需求分析 1.1.概述 1.用户进入“客户管理”,通过列表方式查看用户: 2.客户名称,模糊查询用户列表 3.客户名称,可查看客户详细信息 4.新增.编辑.删除功能等 二.系统设计 需要对原始需求 ...
- [转载]威力导演14旗舰破解版(中文简体)|取消30天限制CyberLink&nb
2015月9月15日(当地时间),CyberLink讯连科技发布新一代视频编辑软件 — PowerDirector威力导演14,融合了上个版本发布以来的多次更新升级,威力导演依旧 ...