QT UDP练习
一、简述
简单的基于UDP协议的双向通信 练习。
例子打包链接: https://pan.baidu.com/s/1k87goWpadgdHvQRTAm_2-Q 提取码: ug7e
二、效果
三、工程结构
四、源文件
Udp1.pro文件
QT widgets gui networkHEADERS \udp1.hSOURCES \main.cpp \udp1.cpp
main.cpp文件
#include #include 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);//发送方IPQHostAddress addres;//发送方端口quint16 port;//接收信息并存放到buf中_udp->readDatagram(buf.data(), buf.size(),//将收到的信息追加展示_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 networkHEADERS \udp2.hSOURCES \udp2.cpp \main.cpp
udp2.h文件
#ifndef UDP2_H#define UDP2_H#include #include #include #include #include class Udp2 : public QDialog{Q_OBJECTpublic:explicit Udp2(QWidget *parent 0);signals:public slots:void MyRecive();//接收信息void MySend();//发送信息private:QUdpSocket* _udp;//通信socketQLineEdit* _lineEdit;//行文本编辑框编写要发送的信息QTextBrowser* _text;//展示接收到的信息};#endif // UDP2_H
main.cpp文件
#include #include 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);//发送方IPQHostAddress addres;//发送方端口quint16 port;//接收信息并存放到buf中_udp->readDatagram(buf.data(), buf.size(),//将收到的信息追加展示_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);}}
【文章转自:香港多ip服务器 http://www.558idc.com/hkzq.html提供,感恩】