QT UDP练习
一、简述
简单的基于UDP协议的双向通信 练习
二、效果
三、工程结构
四、源文件
Udp1.pro文件
QT +=widgets gui network HEADERS += \ udp1.h SOURCES += \ main.cpp \ udp1.cpp
main.cpp文件
#include <QApplication> #include <udp1.h> int main(int argc,char* argv[]) { QApplication app(argc,argv); Udp1 udp; udp.setWindowFlags(Qt::WindowCloseButtonHint);//只留下关闭按钮 udp.setWindowTitle("UDP1[127.0.0.1:10001]");//设置窗体标题 udp.show();//show出窗体 return app.exec(); }
udp1.cpp文件
#include "udp1.h" Udp1::Udp1(QWidget *parent) : QDialog(parent) { //创建行文本编辑框 _lineEdit = new QLineEdit(this); //设置位置、大小 _lineEdit->setGeometry(10,10,130,20); //创建发送按钮 QPushButton *sendBtn = new QPushButton("发送",this); //设置位置、大小 sendBtn->setGeometry(150,10,50,20); //创建文本浏览框 _text = new QTextBrowser(this); //设置位置、大小 _text->setGeometry(10,40,190,200); // 创建udpsocket _udp = new QUdpSocket; //绑定端口 _udp->bind(10001); //并连接槽函数,用来接收数据 connect(_udp, SIGNAL(readyRead()),this, SLOT(MyRecive())); //连接发送信息的槽函数 connect(sendBtn,SIGNAL(clicked()),this,SLOT(MySend())); } void Udp1::MyRecive() { while(_udp->hasPendingDatagrams()) { //获取收到的信息大小 quint32 datagramSize = _udp->pendingDatagramSize(); //用来存储接收到的信息 QByteArray buf(datagramSize, 0); //发送方IP QHostAddress addres; //发送方端口 quint16 port; //接收信息并存放到buf中 _udp->readDatagram(buf.data(), buf.size(),&addres,&port); //将收到的信息追加展示 _text->append("["+addres.toString()+":"+QString::number(port)+"]"+buf); } } void Udp1::MySend() { //获取要发送的信息 QString msg = _lineEdit->text(); //以QByteArray格式将信息发送给主机IP为127.0.0.1的10002号端口 if(!msg.isEmpty()) { _udp->writeDatagram(msg.toUtf8(), QHostAddress("127.0.0.1"), 10002); } }
Udp2.pro文件
QT +=widgets gui network HEADERS += \ udp2.h SOURCES += \ udp2.cpp \ main.cpp
udp2.h文件
#ifndef UDP2_H #define UDP2_H #include <QDialog> #include <QUdpSocket> #include <QLineEdit> #include <QTextBrowser> #include <QPushButton> class Udp2 : public QDialog { Q_OBJECT public: explicit Udp2(QWidget *parent = 0); signals: public slots: void MyRecive();//接收信息 void MySend();//发送信息 private: QUdpSocket* _udp;//通信socket QLineEdit* _lineEdit;//行文本编辑框,编写要发送的信息 QTextBrowser* _text;//展示接收到的信息 }; #endif // UDP2_H
main.cpp文件
#include <QApplication> #include <udp2.h> int main(int argc,char* argv[]) { QApplication app(argc,argv); Udp2 udp; udp.setWindowFlags(Qt::WindowCloseButtonHint);//只留下关闭按钮 udp.setWindowTitle("UDP2[127.0.0.1:10002]");//设置窗体标题 udp.show();//show出窗体 return app.exec(); }
udp2.cpp文件
#include "udp2.h" Udp2::Udp2(QWidget *parent) : QDialog(parent) { //创建行文本编辑框 _lineEdit = new QLineEdit(this); //设置位置、大小 _lineEdit->setGeometry(10,10,130,20); //创建发送按钮 QPushButton *sendBtn = new QPushButton("发送",this); //设置位置、大小 sendBtn->setGeometry(150,10,50,20); //创建文本浏览框 _text = new QTextBrowser(this); //设置位置、大小 _text->setGeometry(10,40,190,200); // 创建udpsocket _udp = new QUdpSocket; //绑定端口 _udp->bind(10002); //并连接槽函数,用来接收数据 connect(_udp, SIGNAL(readyRead()),this, SLOT(MyRecive())); //连接发送信息的槽函数 connect(sendBtn,SIGNAL(clicked()),this,SLOT(MySend())); } void Udp2::MyRecive() { while(_udp->hasPendingDatagrams()) { //获取收到的信心大小 quint32 datagramSize = _udp->pendingDatagramSize(); //用来存储接收到的信息 QByteArray buf(datagramSize, 0); //发送方IP QHostAddress addres; //发送方端口 quint16 port; //接收信息并存放到buf中 _udp->readDatagram(buf.data(), buf.size(),&addres,&port); //将收到的信息追加展示 _text->append("["+addres.toString()+":"+QString::number(port)+"]"+buf); } } void Udp2::MySend() { //获取要发送的信息 QString msg = _lineEdit->text(); //以QByteArray格式将信息发送给主机IP为127.0.0.1的10001号端口 if(!msg.isEmpty()) { _udp->writeDatagram(msg.toUtf8(), QHostAddress("127.0.0.1"), 10001); } }