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的七层参考模型.传统的开放式系统互连参考 ...
随机推荐
- 一道Google面试题——基数排序思想
题目描述: 一个大小为n的数组,里面的数都属于范围[0,n-1],有不确定的重复元素,找到至少一个重复元素,要求O(1)空间和O(n)时间. 算法分析: 这个题目要求用O(n)的时间复杂度,这意味着只 ...
- 母版页改变被嵌套的页面中的控件ID的解决方法
使用过模板页的朋友都会很纳闷,怎么页面的用js通过getElementById(“id”):找不到对象.查看了页面源代码才发现,原来控件的ID变了,这是母版页导致的.因为母版页怕母版页本身页面中的控件 ...
- Linux下Solr的安装和配置
一.安装 1.需要的安装包:apache-tomcat-7.0.47.tar.gz.solr-4.10.3.tgz.tgz(jdk自行安装) 2.解压tomcat并创建solr文件夹 [root@lo ...
- of 循环 改变 对象值 对const的理解 对象的字面量 计算属性
const arr = [{a:23,b:34},{a:123,b:134}]console.log(arr)for (let v of arr){console.log(v)const old = ...
- element-ui中下拉菜单中的@click事件不会触发的问题
只需要将@click=“fun()”改为@click.native=“fun()”,即可监听下拉菜单的点击事件. 如图所示: 嗯,就酱~
- 父标签浮动(float)“塌陷”问题
浮动“塌陷” float参见: http://www.cnblogs.com/bigtreei/p/8110090.html http://www.w3school.com.cn/css/css_po ...
- 数据库质疑修复(SUSPECT)总结,DBCC报错
当SQL SERVER数据库状态为质疑(SUSPECT)状态时,我们可以用以下方法来处理: DBCC报错 1. 修改数据库为紧急模式:ALTER DATABASE DBName SET EMERGEN ...
- android studio 和gradle版本问题解决
打开android studio 开始导入一个 covrdova项目 结果弹出一个这样的对话框意思是 "尚未配置此项目的 gradle" "是否希望项目使用gradle ...
- Python基础-re正则模块
一.简介: 正则表达式:是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过re模块实现,正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎执行. 二.字 ...
- PyQt4设置窗口左上角的小图标
# -*- coding: utf-8 -*- """ ------------------------------------------------- File Na ...