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的七层参考模型.传统的开放式系统互连参考 ...
随机推荐
- jQuery EasyUI介绍
官方定义:http://www.jeasyui.com/ what is JQuery EasyUI ? jQuery EasyUI framework helps you build your we ...
- 编写自己的ls命令
····要编写ls命令,首先要了解它能做什么,完成了什么工作,是如何完成这些工作的···· 一.ls命令能做什么? 我们在命令行输入ls,ls默认找出当前目录中所有文件的文件名,并且按照字典序排序后 ...
- 【BZOJ2762】[JLOI2011]不等式组 树状数组
[BZOJ2762][JLOI2011]不等式组 Description 旺汪与旺喵最近在做一些不等式的练习.这些不等式都是形如ax+b>c 的一元不等式.当然,解这些不等式对旺汪来说太简单了, ...
- SharePoint服务器端对象模型 之 使用CAML进行数据查询(Part 4)
(五)列表查询中的阈值限制 在之前版本的SharePoint 中,如果在查询的时候没有指定返回数目,那么SharePoint将会查找该列表中所有的条目,这可能会造成在SQL表中需要返回大量的条目,极大 ...
- isnull在order by中的使用——让我长见识了
select * from VisitLogorder by ISNULL(NextVisitDate,'2299-01-01') 此sql的作用是查找表中的数据,并按照NextVisitDate字段 ...
- Linux 常用命令缩写及对应的
0.项目名: Linux -- LINUs' uniX (开个玩笑不是这样的,别当真) GNU -- Gnu is Not Unix1.目录名: /boot:顾名思义 /root :同上 /run:同 ...
- grafana零散模块点记录(share,setting,datasourse)
一.Settings 1.General Details Name:当前doshboard名称 Description Tags:当前doshboard设置tag,输入完成是,点击“Enter”才能完 ...
- br_netfilter 模块开机自动方法
环境 cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) 在/etc/sysctl.conf中添加: net.bridge.bri ...
- Axure快捷键
基本快捷键: 打开:Ctrl + O 新建:Ctrl + N 保存:Ctrl + S 退出:Alt + F4 打印:Ctrl + P 查找:Ctrl + F 替换:Ctrl + H 复制:Ctrl + ...
- java bio 之聊天室
最近在复习java io相关知识 ,发现很多细节之前没学习到位,原理也没吃透,只能感叹本人愚钝. 复习到bio,顺手写了个简单的聊天室功能,并和大家分享下. 服务端: package io.QQ聊天室 ...