在ARM上使用QT的TCP/UDP实现图像数据传输

一般在同一局域网段进行通信。

  1. 在arm上使用qt的tcp实现图传

一般将arm设备当做客户端,只需要实现一个tcp的客户端即可。然后取图像数据,按照jpeg编码,通过流传输。

建立连接:

const QString IP = "192.168.3.99";//目标地址
const int PORT = 1000;
socket = new QTcpSocket();
//连接信号槽
QObject::connect(socket, &QTcpSocket::readyRead, this, &camera::socket_Read_Data);
//取消已有的连接
socket->abort();
//连接服务器
socket->connectToHost(IP, PORT);//填写服务器的地址

可以监测连接状态,断开连接的话再次连接:

if(socket->state()!= QAbstractSocket::ConnectedState)
{
    socket->connectToHost(IP, PORT);//填写服务器的地址
}

发送数据:

socket->write(QByteArray);//这里可以填QByteArray或者char[]都行
socket->flush();

发送图像数据:

if(photo == 1)
{
    QImage *mage = new QImage(rgb,640,480,QImage::Format_RGB888);//填入rgb数据即可
    QByteArray ba;
    QBuffer buf(&ba); //把ba绑定到buf上,操作buf就等于操作ba
    mage->save(&buf,"jpg",60);//压缩质量60
    //先写大小过去,告诉主机我们要传输的数据有多大
    socket->write(QString(size=%1").arg(ba.size()).toLocal8Bit().data());
    socket->waitForReadyRead();//等待主机响应“ok”,可有可无
    socket->write(ba);//把图像数据写入传输给主机,这里使用的流传输,由TCP自动控制速率
    socket->flush();
}

前面已经建立了信号槽,有数据时会自动读取,这里当接收到photo\r\n时,将photo标志置1,发送图片数据:

void socket_Read_Data()
{
    QByteArray buffer;
    //读取缓冲区数据
    buffer = socket->readAll();
    if(!buffer.isEmpty())
    {
        QString str;
        str+=tr(buffer);
        qDebug() << "Receive: " << tr(buffer);
        if(tr(buffer) == tr("photo\r\n"))
        {
            photo = 1;
        }
    }
}

  1. 在arm上使用qt的udp实现图传

udp不区分客户端和服务器端,直接建立收发二个socket即可,共用一个也是行的,个人比较喜欢分开写,看着较清晰。

const QString IP = "192.168.3.99";//目标地址
//读写端口也可以一致
const int readport = 1001;
const int writeport = 1002;

//读,绑定读取本地端口
readsocket = new QUdpSocket();
readsocket->bind(readport);
//写
writesocket = new QUdpSocket();

//连接信号槽
QObject::connect(readsocket, &QUdpSocket::readyRead, this, &camera::socket_Read_Data);

发送数据:

char st[10] = "hello";
writesocket->writeDatagram(st, strlen[st], QHostAddress(IP), writeport);

发送图像数据,当然也可以把数据分包传输:

if(photo == 1)
{
    QImage *mage = new QImage(rgb,640,480,QImage::Format_RGB888);
    QByteArray ba;
    QBuffer buf(&ba); //把ba绑定到buf上,操作buf就等于操作ba
    mage->save(&buf,"jpg",60);
    writesocket->writeDatagram(ba.data(), ba.size(), QHostAddress(IP), writeport);
    writesocket->flush();
}

接收数据:

void camera::socket_Read_Data()
{
    if(readsocket->hasPendingDatagrams()) 
    {
        QByteArray datagram;
        datagram.resize(readsocket->pendingDatagramSize());
        QHostAddress sender;
        quint16 senderPort;

        readsocket->readDatagram(datagram.data(), datagram.size(),&sender, &senderPort);
        qDebug() << "sender: " << sender.toString();//数据发送方IP
        qDebug() << "senderPort: " << senderPort;//数据发送方PORT
        qDebug() << "datagram: " << tr(datagram);//接收数据

        if(tr(datagram) == tr("photo\r\n"))
        {
            photo = 1;
        }        
    }
}

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1 章 MagicARM2410 实验箱硬件结构 1.1 功能特点...............................6 1.1.1 硬件资源.......................6 1.1.2 软件资源.......................7 1.1.3 可选硬件.......................8 1.2 S3C2410A 芯片简介 ............8 1.3 硬件原理............................. 11 1.3.1 DeviceARM2410核心板........ 11 1.3.2 实验箱主板....................................24 1.3.3 构建ARM7 教学实验开发平台...45 1.4 硬件结构................................................46 1.4.1 跳线器说明....................................47 1.4.2 连接器说明....................................50 1.5 硬件资源分配情况................................51 1.6 温馨提示................................................53 第2 章 基础实验................................54 2.1 ADS 1.2 集成开发环境练习 .................54 2.2 汇编指令实验1.....................................59 2.3 汇编指令实验2.....................................62 2.4 汇编指令实验3.....................................65 2.5 ARM 处理器工作模式实验 ..................68 2.6 C 语言程序实验 ....................................72 2.7 C 语言调用汇编程序实验 ....................74 2.8 GPIO 输出控制实验.............................76 2.9 GPIO 输入实验.....................................82 2.10 外部中断实验........................................85 2.11 UART 通讯实验....................................90 2.12 I 2 C 接口实验..................................................95 2.13 定时器实验...................................................104 2.14 PWM DAC 实验...........................................107 2.15 ADC实验..................................................... 111 2.16 RTC 实验...................................................... 114 2.17 步进电机控制实验.......................................120 2.18 直流电机控制实验.......................................123 第3 章 基于µC/OS-II 基础实验 ..............127 3.1 µ C/OS-II移植实验.......................................127 3.2 蜂鸣器实验...................................................136 3.3 串行通信实验...............................................140 3.4 图形液晶控制实验.......................................144 3.5 Modbus RTU
学员在中科院学习期间独立完成制作ARM开发板、开发触摸屏驱动等36个嵌入式专题实验项目,1-3个大型项目。其他实验项目如:智能机器人等可在结业后完成。 教学周期:10个月,其中第一学期3个月,第二学期5个月,课程实训2个月。 课程编号 教学单元 教学内容 就业岗位 第一学期 教学课时3个月 ZKQ090101 网络原理及linux服务 网络概述;数据通信基础;网络体系结构与协议;局域网;网络互联与TCP/IP协议;Internet及其应用;网络连接设备与技术 •Linux下C开发人员 •面向C嵌入式开发人员 ZKQ090102 Linux安装 正确安装Linux操作系统 ZKQ090103 Linux 开发环境与应用程序设计 Linux C 编程基础,gdb调式器,Makefile文件概述;Linux系统调用原理;基于系统调用的文件I/O操作;文件上锁,程序机制与功能,特殊文件的操作;串口编程,串口通信的实现;Linux多线程编程 ZKQ090104 嵌入式Linux系统基础 Linux的进程管理,特殊进程的操作;Linux进程间的通信(一):管道通信;Linux进程间的通信(二):信号;Linux进程间的通信(三):消息队列与共享内存 ZKQ090105 FPGA1/CPLD EDA技术简介以及CPLD/FPGA 基础知识,QuartusII软件入门;硬件描述语言( VHDL)基本语法和实践;硬件描述语言( Verilog HDL)基本语法和实践;FPGA实验、DSP入门;Altium Designer 6.x电路原理图与PCB设计 ZKQ090106 Linux内核裁剪与移植 嵌入式简介;Linux 基础知识;交叉编译;Linux 内核配置;Linux 内核移植;根文件系统制作;Boot Loader 制作。 第二学期 教学课时5个月 ZKQ090201 基于ARM7开发平台设计 ARM技术简介以及基础知识,ARM应用入门;ARM启动代码分析、链接脚本讲解;μC/OS II V2.85在ARM的移植;μC/OS II内核精讲;ARM经典实验。 •高级嵌入式开发工程师 •Linux设备驱动开发工程师 •嵌入式系统工程师 •嵌入式技术支持工程师 •嵌入式软件开发工程师 •嵌入式硬件开发工程师 •ARM平台嵌入式开发工程师 ZKQ090202 基于ARM9开发平台设计 嵌入式linux开发平台简介及开发流程;嵌入式Linux开发环境的建立;多线程应用程序设计;串行端口程序设计;A/D接口实验;D/A接口实验;简单的嵌入式WEB服务器实验;RS-485通讯实验;直流与步进电机实验;内核驱动设计入门――模块方式驱动实验;内核驱动设计实验――触摸屏驱动;内核驱动设计――网卡驱动移植及实验;内核驱动设计――LCD驱动移植;音频驱动及实应用实验;USB接口试验 ZKQ090203 FPGA2/SOPC 基于NIOSII嵌入式软处理器的SOPC(可编程片上系统)系统的开发基础和设计技巧以及FPGA最小系统设计方法;SOPC实验。 ZKQ090204 Linux网络编程 Socket 套接字(TCPUDP);原始套接字;多进程、多进程网络编程 ZKQ090205 TCP/IP协议编程 TCP/IP协议分析;构造数据包。 ZKQ090206 C++QT图形编程 Qt开发环境安装与配置;C++面向对象基础;Qt内置组件应用与自定义组件开发;Qt信号与槽机制;Qt模型应用(树、表、栈);Qt多线程与网络Qt图形开发;Qt内置数据仓库技术(mysql、sqlite);Qt解析XML。 ZKQ090207 嵌入式Linux系统原理 Linux内核简介;进程管理及调度;中断及中断处理程序;下半部和工作队列;内核同步方法;定时器和时间管理;内存管理;进程地址空间;内核调试技术;内核可移植性概述。 ZKQ090208 嵌入式Linux驱动开发 设备驱动及内核模块概述;构造和运行模块;编写字符设备驱动程序I;编写字符设备驱动程序II;高级字符驱动程序;与硬件通信;中断处理;Linux设备模型;内存映射操作;DMA技术及应用;块设备驱动程序;网络设备驱动程序;贞缓冲设备驱动;PCI设备驱动程序;USB驱动程序。 课程实训 实训课时2个月 3-5名学员组成一个项目小组,项目自选,项目小组提交项目报告,经审核同意后拨付项目经费,在项目指导教师指导下项目实施,项目完成应有成型产品,组织召开项目完成报告会,项目小组提交项目完成报告书,项目结束。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值