首页 > 其他 > 详细

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

时间:2015-02-28 08:55:36      阅读:415      评论:0      收藏:0      [点我收藏+]

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>
#include <QUdpSocket>

class UdpClient : public QDialog
{
  Q_OBJECT

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

public slots:
  void CloseBtnClicked();
  void dataReceived();

private:
  QTextEdit *ReceiveTextEdit;
  QPushButton *CloseBtn;
  QVBoxLayout *mainLayout;
  int port;   //端口号
  QUdpSocket *udpSocket;    //套接字

};

#endif // UDPCLIENT_H

udpclient.cpp

/**
* 书本:【Qt5开发及实例】
* 功能:实现客户端的编程
* 文件:udpclient.cpp
* 时间:2015年2月5日22:10:30
* 作者:cutter_point
*/
#include "udpclient.h"

#include <QMessageBox>
#include <QHostAddress>

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

  ReceiveTextEdit = new QTextEdit(this);
  CloseBtn = new QPushButton(tr("Close"),this);

  mainLayout=new QVBoxLayout(this);
  mainLayout->addWidget(ReceiveTextEdit);
  mainLayout->addWidget(CloseBtn);
  //初始化界面结束

  connect(CloseBtn, SIGNAL(clicked()), this, SLOT(CloseBtnClicked()));  //关闭

  port = 5555;    //端口号

  udpSocket = new QUdpSocket(this);
  connect(udpSocket, SIGNAL(readyRead()), this, SLOT(dataReceived()));    //收集数据,电报

  bool result = udpSocket->bind(port);    //把udpSocket绑定到相应的端口

  if(!result)   //result为false的话,那么就进行下面的,也就是绑定失败
    {
      QMessageBox::information(this, tr("error"), tr("udp socket create error!"));    //udp协议套接字创建失败
      return;
    }

}

//void CloseBtnClicked();
void UdpClient::CloseBtnClicked()
{
  this->close();    //关闭窗口
}

//void dataReceived();
void UdpClient::dataReceived()
{
  while(udpSocket->hasPendingDatagrams())   //如果有数据报的话
    {
      QByteArray datagram;    //字节流
      datagram.resize(udpSocket->pendingDatagramSize());  //里面那个获得第一个数据报的长度,设定字节流的长度
      udpSocket->readDatagram(datagram.data(), datagram.size());    //读取相应长度的数据报到datagram
      QString msg = datagram.data();    //得到字节流的数据
      ReceiveTextEdit->insertPlainText(msg);    //显示在界面上
    }
}


UdpClient::~UdpClient()
{

}

结果

技术分享




然后是客户端和服务器端,自己可以改一下地址在两台机器上联网运行,或者就在一台机器上,用同样的本地地址运行:

技术分享技术分享技术分享技术分享





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

原文:http://blog.csdn.net/cutter_point/article/details/43973269

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!