QT使用udp实现发送与接收图片

 更新时间:2023年12月29日 16:23:39   作者:秋刀鱼程序编程  
这篇文章主要为大家详细介绍了QT如何使用udp协议实现发送与接收图片功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

使用Qt来通过UDP协议发送和接收图片可以分为几个步骤。以下是一个基本的指南:

发送图片

准备图片数据:首先,你需要将图片转换为可以在网络上传输的数据格式。通常,这涉及到将图片转换为字节数组。

设置UDP套接字:在Qt中,你可以使用QUdpSocket类来创建UDP套接字。你需要指定目标地址和端口号。

发送数据:使用writeDatagram方法将图片数据发送到目标地址。

//发送udp
void MainWindow::sendMess(){
    QByteArray receBuffer;//创建接收字节流
    QBuffer bufferDevice(&receBuffer);//
    bufferDevice.open(QIODevice::WriteOnly);//打开缓冲区,写入字节流
    image.save(&bufferDevice,"png");//图像保存为指定类别
    QHostAddress address("192.168.1.100");//创建IP地址
    quint16 port =1234;//创建端口号
    sendUdp->writeDatagram(receBuffer,QHostAddress::Broadcast,port);//将图片转为字节流发送到指定地址、端口
    sendUdp->flush();
    qDebug()<<"发送字节流:"<<receBuffer.size();
}
 
//选择图像
void MainWindow::on_pBtn_selectImage_clicked()
{
    ui->label->setText("");//清空文本
    //打开文件
    QString fileName=QFileDialog::
                     getOpenFileName(this,"open file",
                     QDir::currentPath(),"Image File(*.jpg *.png)");
    image.load(fileName);//导入图片
    ui->label->setPixmap(QPixmap::fromImage(image));//将图像显示在标签label
    ui->label->resize(image.width(),image.height());//根据图像的大小调整显示大小
 
}
 
//发送图像
void MainWindow::on_pBtn_sendImage_clicked()
{
    sendUdp=new QUdpSocket(this);//创建字节套
    timerSend=new QTimer(this);
    connect(timerSend,&QTimer::timeout,this,&MainWindow::sendMess);//启动定时器发送图片信息
    timerSend->start(1000);//1s发一次
}
 
//停止发送
void MainWindow::on_pushButton_clicked()
{
    timerSend->stop();
    disconnect(timerSend,&QTimer::timeout,this,&MainWindow::sendMess);
    qDebug()<<"停止发送";
}

接收图片

设置UDP套接字:同样,你需要使用QUdpSocket来创建一个UDP套接字。

接收数据:使用readDatagram方法来接收数据。你需要处理接收到的数据,并将其转换回图片格式。

//接收udp
void MainWindow::udpRece(){
//    receUdp->waitForReadyRead(100);//等待10ms写入
    while(receUdp->hasPendingDatagrams()){
        quint64 size=receUdp->pendingDatagramSize();//读取字节流大小
        QByteArray receData;//创建接收字节流
        receData.resize(size);//改变与发送端的字节流大小一样
        receUdp->readDatagram(receData.data(),receData.size());//读取发送端的字节流
        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()<<"接收端字节流大小:"<<receData.size();
    }
}
 
//开始接收连接
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()<<"停止接收";
}

结果显示

以上就是QT使用udp实现发送与接收图片的详细内容,更多关于QT发送接收图片的资料请关注脚本之家其它相关文章!

相关文章

  • C++小利器之std::bind参数绑定包装器的使用详解

    C++小利器之std::bind参数绑定包装器的使用详解

    从 C++11 开始,标准库提供了 std::bind 用于绑定函数 f 和调用参数,返回一个新可调用函数对象 fn,下面就跟随小编一起深入了解一下std::bind的具体使用吧
    2023-12-12
  • C语言绘制简单时钟小程序

    C语言绘制简单时钟小程序

    这篇文章主要为大家详细介绍了C语言绘制简单时钟小程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • C语言链接属性的实践应用

    C语言链接属性的实践应用

    C语言中链接属性决定如何处理在不同文件中出现的标示符,下面这篇文章主要给大家介绍了关于C语言链接属性的实践应用,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • C++中this指针用法示例详解

    C++中this指针用法示例详解

    在C++编程中this指针是每个非静态成员函数的隐含参数,指向调用对象的地址,它用于区分同一个类的不同实例,并访问成员变量和成员函数,这篇文章主要介绍了C++中this指针用法的相关资料,需要的朋友可以参考下
    2024-09-09
  • C语言深入讲解之从函数栈帧角度理解return关键字

    C语言深入讲解之从函数栈帧角度理解return关键字

    在C语言中,一般情况下函数的返回值是通过函数中的return语句来实现的,每调用一次return语句只能从函数中返回一个值,这篇文章主要给大家介绍了关于C语言从函数栈帧角度理解return关键字的相关资料,需要的朋友可以参考下
    2021-09-09
  • 浅谈C++虚重载操作符 virtual operator= 的使用方法

    浅谈C++虚重载操作符 virtual operator= 的使用方法

    下面小编就为大家带来一篇浅谈C++虚重载操作符 virtual operator= 的使用方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • 使用C语言实现字符串逆序操作案例

    使用C语言实现字符串逆序操作案例

    这篇文章主要介绍了使用C语言实现字符串逆序操作案例,本文包含使用C语言的两种方法去实现,递归和非递归,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C++实现航空订票程序

    C++实现航空订票程序

    这篇文章主要为大家详细介绍了C++实现航空订票程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • C++高级数据结构之优先队列

    C++高级数据结构之优先队列

    这篇文章主要介绍了C++高级数据结构之优先队列,文章围绕主题的相关资料展开详细介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • 浅谈C++中的mutable和volatile关键字

    浅谈C++中的mutable和volatile关键字

    下面小编就为大家带来一篇浅谈C++中的mutable和volatile关键字。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06

最新评论