一、UDP協(xié)議簡(jiǎn)介
UDP是用戶數(shù)據(jù)報(bào)協(xié)議(User Datagram Protocool)的簡(jiǎn)稱,是OSI(Open System Interconnection侠驯,開(kāi)放式系統(tǒng)互聯(lián))參考模型中一種無(wú)連接的傳輸層協(xié)議超棺,提供面向事務(wù)的簡(jiǎn)單不可靠信息傳送服務(wù)。UDP雖然具有不提供數(shù)據(jù)包分組搀继、組裝和不能對(duì)數(shù)據(jù)包進(jìn)行排序的缺點(diǎn)窘面,也就是說(shuō),當(dāng)報(bào)文發(fā)送之后無(wú)法得知其是否安全完整的到達(dá)叽躯,但其面向無(wú)連接的特點(diǎn)在嵌入式系統(tǒng)中有著不可或缺的作用财边。
二、Qt編寫(xiě)UDP服務(wù)端
1.新建工程点骑,在.pro文件中加入
QT += network
2.在mainwindow.h中加入頭文件的引用
#include <QUdpSocket>
3.完成上述兩步之后酣难,就可以使用UDP了,首先我們?cè)趍ainwindow.ui中放置一個(gè)Line Edit控件用來(lái)顯示客戶端發(fā)送的數(shù)據(jù)黑滴。然后憨募,創(chuàng)建UDP服務(wù)器,綁定本地端口袁辈,并連接到消息接收的槽函數(shù)菜谣。
QUdpSocket *udpServer;
udpServer = new QUdpSocket(this);
udpServer->bind(QHostAddress::Any, 8888);
connect(udpServer, SIGNAL(readyRead()), this, SLOT(readyread()));
4.接收消息的槽函數(shù)
void MainWindow::readyread()
{
QByteArray array;
array.resize(udpServer->bytesAvailable());
udpServer->readDatagram(array.data(),array.size());
ui->lineEdit->setText(array);
}
Qt編寫(xiě)UDP客戶端
1.新建工程,在.pro文件中加入
QT += network
2.在mainwindow.h中加入頭文件的引用
#include <QUdpSocket>
3.在mainwindow.ui中放置一個(gè)Line Edit控件和一個(gè)Push Button控件晚缩,Line Edit控件用戶輸入想要發(fā)送的數(shù)據(jù)尾膊,Push Button按鈕負(fù)責(zé)將數(shù)據(jù)通過(guò)UDP發(fā)送至服務(wù)端。
4.創(chuàng)建UDP客戶端
QUdpSocket *udpClient;
udpClient = new QUdpSocket(this);
5.發(fā)送按鈕槽函數(shù)
void MainWindow::on_pushButton_clicked()
{
udpClient->writeDatagram(ui->lineEdit->text().toUtf8(),QHostAddress("127.0.0.1"),8888);
}