QT使用udp實(shí)現(xiàn)發(fā)送與接收?qǐng)D片
使用Qt來(lái)通過(guò)UDP協(xié)議發(fā)送和接收?qǐng)D片可以分為幾個(gè)步驟。以下是一個(gè)基本的指南:
發(fā)送圖片
準(zhǔn)備圖片數(shù)據(jù):首先,你需要將圖片轉(zhuǎn)換為可以在網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)格式。通常,這涉及到將圖片轉(zhuǎn)換為字節(jié)數(shù)組。
設(shè)置UDP套接字:在Qt中,你可以使用QUdpSocket類來(lái)創(chuàng)建UDP套接字。你需要指定目標(biāo)地址和端口號(hào)。
發(fā)送數(shù)據(jù):使用writeDatagram方法將圖片數(shù)據(jù)發(fā)送到目標(biāo)地址。
//發(fā)送udp void MainWindow::sendMess(){ QByteArray receBuffer;//創(chuàng)建接收字節(jié)流 QBuffer bufferDevice(&receBuffer);// bufferDevice.open(QIODevice::WriteOnly);//打開(kāi)緩沖區(qū),寫入字節(jié)流 image.save(&bufferDevice,"png");//圖像保存為指定類別 QHostAddress address("192.168.1.100");//創(chuàng)建IP地址 quint16 port =1234;//創(chuàng)建端口號(hào) sendUdp->writeDatagram(receBuffer,QHostAddress::Broadcast,port);//將圖片轉(zhuǎn)為字節(jié)流發(fā)送到指定地址、端口 sendUdp->flush(); qDebug()<<"發(fā)送字節(jié)流:"<<receBuffer.size(); } //選擇圖像 void MainWindow::on_pBtn_selectImage_clicked() { ui->label->setText("");//清空文本 //打開(kāi)文件 QString fileName=QFileDialog:: getOpenFileName(this,"open file", QDir::currentPath(),"Image File(*.jpg *.png)"); image.load(fileName);//導(dǎo)入圖片 ui->label->setPixmap(QPixmap::fromImage(image));//將圖像顯示在標(biāo)簽label ui->label->resize(image.width(),image.height());//根據(jù)圖像的大小調(diào)整顯示大小 } //發(fā)送圖像 void MainWindow::on_pBtn_sendImage_clicked() { sendUdp=new QUdpSocket(this);//創(chuàng)建字節(jié)套 timerSend=new QTimer(this); connect(timerSend,&QTimer::timeout,this,&MainWindow::sendMess);//啟動(dòng)定時(shí)器發(fā)送圖片信息 timerSend->start(1000);//1s發(fā)一次 } //停止發(fā)送 void MainWindow::on_pushButton_clicked() { timerSend->stop(); disconnect(timerSend,&QTimer::timeout,this,&MainWindow::sendMess); qDebug()<<"停止發(fā)送"; }
接收?qǐng)D片
設(shè)置UDP套接字:同樣,你需要使用QUdpSocket來(lái)創(chuàng)建一個(gè)UDP套接字。
接收數(shù)據(jù):使用readDatagram方法來(lái)接收數(shù)據(jù)。你需要處理接收到的數(shù)據(jù),并將其轉(zhuǎn)換回圖片格式。
//接收udp void MainWindow::udpRece(){ // receUdp->waitForReadyRead(100);//等待10ms寫入 while(receUdp->hasPendingDatagrams()){ quint64 size=receUdp->pendingDatagramSize();//讀取字節(jié)流大小 QByteArray receData;//創(chuàng)建接收字節(jié)流 receData.resize(size);//改變與發(fā)送端的字節(jié)流大小一樣 receUdp->readDatagram(receData.data(),receData.size());//讀取發(fā)送端的字節(jié)流 QBuffer receBuffer(&receData);// QImageReader reader(&receBuffer,"png"); QImage receImage=reader.read(); sence=new QGraphicsScene(ui->graphicsView); ui->graphicsView->setScene(sence); QGraphicsPixmapItem *pixmapItem= new QGraphicsPixmapItem(QPixmap::fromImage(receImage)); sence->addItem(pixmapItem); qDebug()<<"接收端字節(jié)流大?。?<<receData.size(); } } //開(kāi)始接收連接 void MainWindow::on_pBtn_receImage_clicked() { timerRece=new QTimer(this); connect(timerRece,&QTimer::timeout,this,&MainWindow::udpRece); timerRece->start(1000); // receUdp=new QUdpSocket(this); // receUdp->bind(QHostAddress::Any,1234); // connect(receUdp,&QUdpSocket::readyRead,this,&MainWindow::udpRece); } //停止接收 void MainWindow::on_pBtn_stopRece_clicked() { timerRece->stop(); disconnect(timerRece,&QTimer::timeout,this,&MainWindow::udpRece); qDebug()<<"停止接收"; }
結(jié)果顯示
以上就是QT使用udp實(shí)現(xiàn)發(fā)送與接收?qǐng)D片的詳細(xì)內(nèi)容,更多關(guān)于QT發(fā)送接收?qǐng)D片的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C++小利器之std::bind參數(shù)綁定包裝器的使用詳解
從 C++11 開(kāi)始,標(biāo)準(zhǔn)庫(kù)提供了 std::bind 用于綁定函數(shù) f 和調(diào)用參數(shù),返回一個(gè)新可調(diào)用函數(shù)對(duì)象 fn,下面就跟隨小編一起深入了解一下std::bind的具體使用吧2023-12-12C語(yǔ)言深入講解之從函數(shù)棧幀角度理解return關(guān)鍵字
在C語(yǔ)言中,一般情況下函數(shù)的返回值是通過(guò)函數(shù)中的return語(yǔ)句來(lái)實(shí)現(xiàn)的,每調(diào)用一次return語(yǔ)句只能從函數(shù)中返回一個(gè)值,這篇文章主要給大家介紹了關(guān)于C語(yǔ)言從函數(shù)棧幀角度理解return關(guān)鍵字的相關(guān)資料,需要的朋友可以參考下2021-09-09淺談C++虛重載操作符 virtual operator= 的使用方法
下面小編就為大家?guī)?lái)一篇淺談C++虛重載操作符 virtual operator= 的使用方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01使用C語(yǔ)言實(shí)現(xiàn)字符串逆序操作案例
這篇文章主要介紹了使用C語(yǔ)言實(shí)現(xiàn)字符串逆序操作案例,本文包含使用C語(yǔ)言的兩種方法去實(shí)現(xiàn),遞歸和非遞歸,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07C++高級(jí)數(shù)據(jù)結(jié)構(gòu)之優(yōu)先隊(duì)列
這篇文章主要介紹了C++高級(jí)數(shù)據(jù)結(jié)構(gòu)之優(yōu)先隊(duì)列,文章圍繞主題的相關(guān)資料展開(kāi)詳細(xì)介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-05-05淺談C++中的mutable和volatile關(guān)鍵字
下面小編就為大家?guī)?lái)一篇淺談C++中的mutable和volatile關(guān)鍵字。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06