Qt-网络与通信-UDP网络通讯
【摘要】
用户数据报协议是一种简单的轻量级、不可靠、面向数据、无连接的传出层协议,可以应用于在可靠性不是十分重要的场合,如短消息,广播信息等。
例如一下场合
网络数据大多为短消息
拥有大量客户端
对数据安全性无特殊要求
网络负担飞常重,但对响应速度要求高
示例截图
服务器代码
.h
#ifnd...
用户数据报协议是一种简单的轻量级、不可靠、面向数据、无连接的传出层协议,可以应用于在可靠性不是十分重要的场合,如短消息,广播信息等。
例如一下场合
网络数据大多为短消息
拥有大量客户端
对数据安全性无特殊要求
网络负担飞常重,但对响应速度要求高
示例截图
服务器代码
.h
-
#ifndef UDPSERVER_H
-
#define UDPSERVER_H
-
-
#include <QDialog>
-
#include <QLabel>
-
#include <QLineEdit>
-
#include <QPushButton>
-
#include <QVBoxLayout>
-
#include <QUdpSocket>
-
#include <QTimer>
-
class UdpServer : public QDialog
-
{
-
Q_OBJECT
-
-
public:
-
UdpServer(QWidget *parent = 0);
-
~UdpServer();
-
-
public slots:
-
void StartBtnClicked();
-
void timeout();
-
private:
-
QLabel *TimerLabel;
-
QLineEdit *TextLineEdit;
-
QPushButton *StartBtn;
-
QVBoxLayout *mainLayout;
-
-
int port;
-
bool isStarted;
-
QUdpSocket *udpSocket;
-
QTimer *timer;
-
-
};
-
-
#endif // UDPSERVER_H
.cpp
-
#include "udpserver.h"
-
-
UdpServer::UdpServer(QWidget *parent)
-
: QDialog(parent)
-
{
-
setWindowTitle(tr("UDP Server"));
-
TimerLabel = new QLabel(tr("计时器:"),this);
-
TextLineEdit = new QLineEdit(this);
-
StartBtn = new QPushButton(tr("Start"),this);
-
-
mainLayout = new QVBoxLayout(this);
-
mainLayout->addWidget(TimerLabel);
-
mainLayout->addWidget(TextLineEdit);
-
mainLayout->addWidget(StartBtn);
-
-
-
connect(StartBtn,SIGNAL(clicked(bool)),this,SLOT(StartBtnClicked()));
-
port = 5555;
-
isStarted = false;
-
udpSocket = new QUdpSocket(this);
-
timer = new QTimer(this);
-
-
connect(timer,SIGNAL(timeout()),this,SLOT(timeout()));
-
}
-
-
UdpServer::~UdpServer()
-
{
-
-
}
-
-
void UdpServer::StartBtnClicked()
-
{
-
if(!isStarted)
-
{
-
StartBtn->setText("Stop");
-
timer->start(1000);
-
isStarted = true;
-
}
-
else
-
{
-
StartBtn->setText("Start");
-
isStarted = false;
-
timer->stop();
-
}
-
}
-
-
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;
-
}
-
}
客户端代码
.h
-
#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);
-
~UdpClient();
-
public slots:
-
void CloseBtnClicked();
-
void dataReceived();
-
private:
-
QTextEdit *ReceiveTextEdit;
-
QPushButton *CloseBtn;
-
QVBoxLayout *mainLayout;
-
-
int port;
-
QUdpSocket *udpSocket;
-
};
-
-
#endif // UDPCLIENT_H
.cpp
-
#include "udpclient.h"
-
#include <QMessageBox>
-
#include <QHostAddress>
-
UdpClient::UdpClient(QWidget *parent)
-
: QDialog(parent)
-
{
-
setWindowTitle("UODClient");
-
ReceiveTextEdit = new QTextEdit(this);
-
CloseBtn = new QPushButton("close",this);
-
-
mainLayout = new QVBoxLayout(this);
-
-
mainLayout->addWidget(ReceiveTextEdit);
-
mainLayout->addWidget(CloseBtn);
-
-
-
connect(CloseBtn,SIGNAL(clicked(bool)),this,SLOT(CloseBtnClicked()));
-
port = 5555;
-
udpSocket = new QUdpSocket(this);
-
-
connect(udpSocket,SIGNAL(readyRead()),this,SLOT(dataReceived()));
-
-
bool result = udpSocket->bind(port);
-
if(!result)
-
{
-
QMessageBox::information(this,"Error","udp socket create error!");
-
return;
-
}
-
}
-
-
UdpClient::~UdpClient()
-
{
-
-
}
-
-
void UdpClient::CloseBtnClicked()
-
{
-
close();
-
}
-
-
void UdpClient::dataReceived()
-
{
-
while (udpSocket->hasPendingDatagrams())
-
{
-
QByteArray datagram;
-
datagram.resize(udpSocket->pendingDatagramSize());
-
udpSocket->readDatagram(datagram.data(),datagram.size());
-
QString msg = datagram.data();
-
ReceiveTextEdit->insertPlainText(msg);
-
}
-
-
}
工程连接:https://gitee.com/DreamLife-Technology_DreamLife/UDPProject
文章来源: dreamlife.blog.csdn.net,作者:DreamLife.,版权归原作者所有,如需转载,请联系作者。
原文链接:dreamlife.blog.csdn.net/article/details/79406029
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)