Qt中UDP通信的简单示例
生活随笔
收集整理的這篇文章主要介紹了
Qt中UDP通信的简单示例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
udp通信分為發送端和接收端,通信步驟可以分為以下:
接收端:
發送端:
1.創建QUdpSocket對象。在.h文件中添加類的前置聲明,定義該類的指針,在.cpp的構造函數中定義指向該類的指針。
2.發送數據。調用writeDatagram()函數發送數據到指定的IP和端口。
下面是界面效果:
發送端的代碼:
Send.h
Send.cpp
#include "Send.h" #include "ui_Send.h" #include <QtNetwork> #include <QDebug>Send::Send(QWidget *parent): QDialog(parent), ui(new Ui::Send) {ui->setupUi(this);setWindowTitle(tr("發送端"));sender = new QUdpSocket(this);ui->sendButton->setEnabled(false); }Send::~Send() {delete ui; }void Send::on_textEdit_cursorPositionChanged() {if(!ui->textEdit->toPlainText().isEmpty()){ui->sendButton->setEnabled(true);} }void Send::on_sendButton_clicked() {QByteArray text = ui->textEdit->toPlainText().toUtf8();//每次只發送輸入的哪些文字,不會追加qint64 bytes = sender->writeDatagram(text,text.size(),QHostAddress::LocalHost,7777);if(bytes == -1){qDebug()<<"發送數據失敗!";return ;} }接收端的代碼:
Receive.h
Receive.cpp
#include "receive.h" #include "ui_receive.h" #include <QtNetwork> #include <QDebug> #include <QTimer>Receive::Receive(QWidget *parent): QDialog(parent), ui(new Ui::Receive) {ui->setupUi(this);setWindowTitle(tr("接收端"));receiver = new QUdpSocket(this);receiver->bind(QHostAddress("127.0.0.1"),7777);connect(receiver,&QUdpSocket::readyRead,this,&Receive::slot_readyRead);timer = new QTimer(this);connect(timer,&QTimer::timeout,this,&Receive::slot_timeout); // void (QUdpSocket:: *errorSign)(QAbstractSocket::SocketError) = &QUdpSocket::error; // connect(receiver,errorSign,this,&Receive::slot_error);//用不上error信號,發送端與接收端是無連接的,給關閉發送端,//對于接收端沒有聯動的影響 }Receive::~Receive() {delete ui; }void Receive::slot_readyRead() {if(receiver->hasPendingDatagrams()){QHostAddress sendAddr;//發送者的IP地址quint16 port;//發送者的端口QByteArray text;text.resize(receiver->pendingDatagramSize());receiver->readDatagram(text.data(),(qint64)text.size(),&sendAddr,&port);qDebug()<<sendAddr.toString()<<port;//輸出發送端的IP和端口號,(端口號還不是和能理解,為什么不是7777)ui->textEdit->setPlainText(text);//會自動在上一次的內容后面追加ui->label->setText(tr("數據接收完成!"));timer->start(2000);} }void Receive::slot_error() {qDebug()<<receiver->errorString();receiver->close(); }void Receive::slot_timeout() {ui->label->setText(tr(" ")); }以上是UDP通信時,發送端與接收端的代碼,其main.cpp文件沒有任何的改變,所以沒有貼,由于Udp是無連接的,所以最后關于close()套接字,一般沒有用到,因為發送完消息之后,調用close()來關閉套接字和沒有調用close()關閉套接字的效果是一樣的,他們之間沒有連接,只是在傳輸數據時指定了端口與IP,當然很多東西還沒有接觸到具體視情況而定close()的有無。
總結
以上是生活随笔為你收集整理的Qt中UDP通信的简单示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql+json+检索_如何从mys
- 下一篇: qt中实现绘制图形与截图