【Qt5开发及实例】29、实现服务器端的编程,UDP协议

udpserver.h

/**
* 书本:【Qt5开发及实例】
* 功能:实现服务器端的编程
* 文件:udpserver.h
* 时间:2015年2月5日21:05:21
* 作者:cutter_point
*/
#ifndef UDPSERVER_H
#define UDPSERVER_H

#include <QDialog>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QVBoxLayout>
#include <QTimer>
#include <QUdpSocket>

class UdpServer : public QDialog
{
  Q_OBJECT

public:
  UdpServer(QWidget *parent = 0, Qt::WindowFlags f = 0);
  ~UdpServer();

public slots:
  void StartBtnClicked();
  void timeout();

private:
  QLabel *TimerLabel;   //计时器标签
  QLineEdit *TextLineEdit;    //显示
  QPushButton *StartBtn;    //开始按钮
  QVBoxLayout *mainLayout;   //布局
  int port;     //UDP端口号
  bool isStarted;   //判断是否开始计算
  QUdpSocket *udpSocket;
  QTimer *timer;      //每隔一段时间就发送广播
};

#endif // UDPSERVER_H

udpserver.cpp

/**
* 书本:【Qt5开发及实例】
* 功能:实现服务器端的编程
* 文件:udpserver.cpp
* 时间:2015年2月5日21:05:21
* 作者:cutter_point
*/
#include "udpserver.h"

#include <QHostAddress>

UdpServer::UdpServer(QWidget *parent,Qt::WindowFlags f)
  : QDialog(parent, f)
{
  setWindowTitle(tr("UDP Server"));

  TimerLabel = new QLabel(tr("计时器:"),this);
  TextLineEdit = new QLineEdit(this);
  StartBtn = new QPushButton(tr("开始:"),this);

  mainLayout = new QVBoxLayout(this);
  mainLayout->addWidget(TimerLabel);
  mainLayout->addWidget(TextLineEdit);
  mainLayout->addWidget(StartBtn);    //布置好界面显示

  connect(StartBtn, SIGNAL(clicked()), this, SLOT(StartBtnClicked()));    //点击按钮触发事件
  //设定UDP端口
  port = 5555;
  isStarted = false;    //开始是没有启动
  udpSocket = new QUdpSocket(this);   //一个套接字
  timer = new QTimer(this);   //计时器
  connect(timer, SIGNAL(timeout()), this, SLOT(timeout()));
}

//  void StartBtnClicked();
void UdpServer::StartBtnClicked()
{
  if(!isStarted)    //如果计时还没有启动
    {
      StartBtn->setText(tr("停止"));
      timer->start(1000);   //开始启动计时器并执行1000毫秒,也就是1秒
      isStarted = true;   //表示启动
    }
  else
    {
      StartBtn->setText(tr("开始:"));
      isStarted = false;
      timer->stop();    //停止计时
    }
}

//void timeout();
void UdpServer::timeout()
{
  QString msg = TextLineEdit->text();
  int length = 0;
  if(msg == "")   //为空就不进行端口传输
    {
      return;
    }

   //发送数据报到相应的端口
  if((length = udpSocket->writeDatagram(msg.toLatin1(), msg.length(), QHostAddress::Broadcast, port)) != msg.length())
    {
      return;
    }

}

UdpServer::~UdpServer()
{

}

结果

时间: 2024-10-12 18:31:20

【Qt5开发及实例】29、实现服务器端的编程,UDP协议的相关文章

【Qt5开发及实例】25、实现代理的功能

实现代理的功能 在Qt里面也有MVC,那就是视图,模型,代理,后面我们再开一章,好好来学习一下Qt的MVC吧! main.cpp /** * 书本:[Qt5开发及实例] * 功能:实现代理的功能 * 文件:main.cpp * 时间:2015年1月29日20:53:04 * 作者:cutter_point */ #include <QApplication> #include <QStandardItemModel> #include <QTableView> //#i

【Qt5开发及实例】30、实现客户端的编程,UDP协议

udpclient.h /** * 书本:[Qt5开发及实例] * 功能:实现客户端的编程 * 文件:udpclient.h * 时间:2015年2月5日22:10:30 * 作者:cutter_point */ #ifndef UDPCLIENT_H #define UDPCLIENT_H #include <QDialog> #include <QVBoxLayout> #include <QTextEdit> #include <QPushButton>

【Qt5开发及实例】22、文件浏览器

文件浏览器 今天有点痿了,昨天晚上2点左右睡的,怪我太痴迷编程???? NO!NO!NO!  看网络小说到2点,= =.我也是醉了,不知道为什么昨天晚上就是睡不着,然后就掏出手机看起了小说,结果是TMD居然看到了精彩片段,呵呵,等我回过神来已经2点了,坑.... 今天就做了个简单的小程序,然后就看看书,也没怎么敲代码,我觉得还是蛮好的,有时候不能往死里敲代码,还是要休息一下,看看其他的,思考一下下一步怎么走. 恩!就是这样,好吧,前面的这些才是今天的主要收获!! 文件浏览模型 /** * 书本:

【Qt5开发及实例】24、数据柱形图显示

数据柱形图显示 1.我们首先把这个这个视图的表格部分表示出来 mainwindow.h /** * 书本:[Qt5开发及实例] * 功能:数据柱形图显示,这个类是表格显示 * 文件:mainwindow.h * 时间:2015年1月28日18:50:54 * 作者:cutter_point */ #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QStandardItemModel>

【Qt5开发及实例】18、图形修饰小工具

图形修饰小工具 无力吐槽,这是我第三遍写这个了,到底是个什么意思???我只要一贴代码,浏览器直接崩溃,呵呵了,我也是,我现在只要写完一段字我就保存,尼玛在掉我就不写了,写到word里面,再贴上来. 效果 左边图形展示界面 paintarea.h /** * 书本:[Qt5开发及实例] * 功能:实现绘画各种图形 * 文件:paintarea.h * 时间:2015年1月21日16:59:25 * 作者:cutter_point */ #ifndef PAINTAREA_H #define PAI

Qt5主窗体程序: 文本编辑器的实现(Qt5开发及实例)

下面的程序出自<Qt5开发及实例>陆文周. 效果图: 程序是一个文本编辑器的实例,主界面如下: 程序中的源文件和头文件: 源代码: 文件main.cpp的源代码: #include "mainwindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); QFont font("楷体",15); a.setFont

【Qt5开发及实例】27、获得文件的信息

fileinfo.h /** * 书本:[Qt5开发及实例] * 功能:获得文件的信息 * 文件:fileinfo.h * 时间:2015年2月4日17:23:38 * 作者:cutter_point */ #ifndef FILEINFO_H #define FILEINFO_H #include <QDialog> #include <QLabel> #include <QPushButton> #include <QLineEdit> #include

【Qt5开发及实例】28、获取本机网络信息

networkinformation.h /** * 书本:[Qt5开发及实例] * 功能:获取本机网络信息 * 文件:networkinformation.h * 时间:2015年2月5日14:51:33 * 作者:cutter_point */ #ifndef NETWORKINFORMATION_H #define NETWORKINFORMATION_H #include <QWidget> #include <QLabel> #include <QLineEdit&

【Qt5开发及实例】10、关于进度条的显示

平常我们下载东西总会有一个显示下载了多少的进度条,我们今天来实现一下. 这里有两种显示方式 可以选择,第一个是用了 QProgressBar控件,第二个是用了QProgressDialog控件 progressdlg.h /** * 书本:[Qt5开发及实例] * 功能:为了实现进度条的显示 * 文件:progressdlg.h * 时间:2015年1月2日15:27:10 * 作者:cutter_point */ #ifndef PROGRESSDLG_H #define PROGRESSDL