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 建立客户端与服务器端的更多相关文章

  1. C/S模型:TCP,UDP构建客户端和服务器端(BIO实现

    Java中提供了socket编程来构建客户端和服务器端 TCP构建服务器端的步骤:(1)bind:绑定端口号(2)listen:监听客户端的连接请求(3)accept:返回和客户端连接的实例(4)re ...

  2. 基于UDP的客户端和服务器端的代码设计

    实验平台 linux 实验内容 编写UDP服务器和客户端程序,客户端发送消息,服务器接收消息,并打印客户端的IP地址和端口号. 实验原理 UDP是无需连接的通信,其主要实现过程如下: 同样,我们可以按 ...

  3. Qt实现网络聊天室(客户端,服务端)

    1. 效果演示 客户端 服务器 连接成功之后 2. 预备知识 如果不知道网络编程的可以去看我的上一篇文章C++网络编程 在Qt中,实现网络编程的方式比用C++或C实现要方便简单许多,因为Qt已经替我们 ...

  4. paip.c++ qt 共享库dll的建立

    paip.c++ qt 共享库dll的建立 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.csdn.net/at ...

  5. QT在ui文件上建立信号操机制会不会对后期维护产生影响 - love4Mario的专栏 - 博客频道 - CSDN.NETQT在ui文件上建立信号操机制会不会对后期维护产生影响 - love4Mario的专栏 - 博客频道 - CSDN.NET

    QT在ui文件上建立信号操机制会不会对后期维护产生影响 - love4Mario的专栏 - 博客频道 - CSDN.NET QT在ui文件上建立信号操机制会不会对后期维护产生影响 分类: 学习心得 2 ...

  6. 6-1 建立客户端与zk服务端的连接

    6-1 建立客户端与zk服务端的连接 zookeeper原生java api使用 会话连接与恢复; 节点的增删改查; watch与acl的相关操作; 导入jar包;

  7. 浅析Java web程序之客户端和服务器端交互原理(转)

    转载自http://www.cnblogs.com/lys_013/archive/2012/05/05/2484561.html 1. 协议 a. TCP/IP整体构架概述 TCP/IP协议并不完全 ...

  8. [转]HTTP报文接口及客户端和服务器端交互原理

    1. 协议 a. TCP/IP整体构架概述 TCP/IP协议并不完全符合OSI的七层参考模型.传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务.该模型的目的 ...

  9. 浅析Java web程序之客户端和服务器端交互原理

    原文链接: https://www.iteye.com/topic/470019 1. 协议 a. TCP/IP整体构架概述 TCP/IP协议并不完全符合OSI的七层参考模型.传统的开放式系统互连参考 ...

随机推荐

  1. HDU1688(Sightseeing)

    题目链接:传送门 题目大意:给你一幅图(单向边),找出从起点到终点有多少条不同路径(最短路或者比最短路长度大1) 题目思路:二维dijkstra,真的是要对dijkstra理解非常透彻才行,距离数组d ...

  2. 《从零开始学Swift》学习笔记(Day 12)——说几个特殊运算符

    原创文章,欢迎转载.转载请注明:关东升的博客   除了一些常用的运算符,还有一些其他的: •      引用号(.):实例调用属性.方法等操作符. •      问号(?):用来声明可选类型. •   ...

  3. Redis 持久化机制

    1.背景 之前在使用redis 时候,没有过多的考虑持久化! 但是这样即使你用了redis 也是徒劳,表面上你是用上了redis 进行缓存数据,感觉已经给自己的架构添加了一个道QPS 防护墙! 哈哈, ...

  4. Lucene索引数计算

    Elasticsearch默认在创建索引结束时得到5个分片及1个副本: 分片是有0-n个副本,“5个分片及1个副本”即“5个分片及5个相应分片副本”:共10个Lucene索引 副本数:指的是“单个分片 ...

  5. Python菜鸟之路:DOM基础

    前言 DOM 是 Document Object Model(文档对象模型)的缩写,定义了访问和操作 HTML 文档的标准方法.DOM把网页和脚本以及其他的编程语言联系了起来.DOM属于浏览器,而不是 ...

  6. 父类virtual和overload,子类reintroduce; overload;

    如果函数在父类中既是虚拟方法也是重载方法,那么:TBase=class(TObject)function DisappearRoutinel: String; overload; virtual;fu ...

  7. 【22,23节】Django的GET和POST属性笔记

    COOKIES:一个标准的python字典对象,包含所有cookies,键和值都为字符串session:一个即能读又能写的类似字典对象,表示当前的会话,只有当django启用会话的支持时才可用 一键多 ...

  8. 常用代码块:java使用系统浏览器打开url

    方法一:用于windows try { Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler "+url) ...

  9. Android系统移植与调试之------->build.prop生成过程分析

    本文简要分析一下build.prop是如何生成的.Android的build.prop文件是在Android编译时刻收集的各种property(LCD density/语言/编译时间, etc.),编 ...

  10. bzoj3007 解救小云公主

    3007: 解救小云公主 Time Limit: 5 Sec  Memory Limit: 512 MB Submit: 159  Solved: 71 [id=3007" style=&q ...