linux实战项目
文章平均质量分 57
linux实战项目
One Piece&
这个作者很懒,什么都没留下…
展开
-
基于QT开发多人聊天项目6:总结
1、应用层协议的设计:要考虑到封包格式,可能带来的问题:1.1 以服务器给客户端回应的0X12 ID0 ID1 …为例。客户端不知道读到哪里结束,他就会一致读,可能读到的其他客户端给本客户端发来的数据。而客户端并不知道在哪里结束,所以,客户但机会误将其他客户端发来的数据当作是ID,进行显示。1.2 粘包问题:连续发了两次显示列表的命令,由于网络原因,可能同时发两个回来(如果不能确定每个数据包的长度)。同样不知道一个包是哪里开始,哪里就结束。为解决上述问题,我们通过采用定义包头包尾的方式(解决数据长原创 2021-03-09 19:17:17 · 1028 阅读 · 1 评论 -
基于QT开发多人聊天项目5:功能完善 多线程加锁以及网络的异常处理
1、服务器主动断开的处理如果服务器断开连接,用于通信的套接字就会产生一个disconnected()信号://如果服务器断开连接,客户端要收到提示connect(_socket, SIGNAL(disconnected()), this, SLOT(disconnected()));在槽函数中,执行相关的处理函数。2、网路异常处理如果网络突然断开,服务器和客户端将断开连接。此时,服务器收不到客户端的发来的信息,但是却没有相关的处理操作。 客户端这面,由于在qt层面已经做好了封装,会产生disc原创 2021-03-09 19:11:25 · 770 阅读 · 0 评论 -
Qt下实现16进制收发数据
16进制数据接收 //接收到的数据,保存在 info QByteArray info = serialPort->readAll(); //将数据转化成16进制显示 ui->receiveTextEdit->appendPlainText(info.toHex().toUpper());16进制数据发 //从LineEdit得到字符串 QString str = ui->sendEdit->text(); //将str字符串原创 2021-03-09 09:42:13 · 2240 阅读 · 0 评论 -
基于QT开发多人聊天项目4:获取在线列表功能和聊天功能的实现
1 获取在线列表功能实现1.1 、客户端这个功能,客户端的组包和解包的实现,和上一节的类似。只是要注意:为实时获得在线情况,我们需要用到定时器。通过定时器,周期的发送 获取在线列表 的数据包。1.2 服务器端为了能够保存客户端登录信息,我们使用链表,对客户端的登录信息进行保存。这里用到了链表的基本操作。参考博客:https://blog.csdn.net/cainiaofu/article/details/1085347312、聊天功能的实现2.1预期效果点击在线用户列表中的某个ID,原创 2021-03-06 23:27:24 · 1568 阅读 · 0 评论 -
基于QT开发多人聊天项目3:登录功能的实现
1 本功能实现的效果客户端通过IP和端口号与服务器建立连接;建立连接以后,客户端封装一个数据包“0x02 0x11 0x03”,发送给服务器;服务器收到这个数据包以后,先将这个数据包读出来“0x02 0x11 0x03”;读出来以后,进行解包。也就是:通过第二个字节,判断发来的数据包是什么类型的,根据类型,执行对应的操作。在这里,就是:当第二个字节是“0x11”的时候,就表示这是客户端发来的登录包;服务器需要回发给客户端服务器为他分配的唯一的ID号。客户端通过信号与槽机制,接受服务器发来的数据包。原创 2021-03-05 21:00:07 · 494 阅读 · 0 评论 -
基于QT开发多人聊天项目2: 搭建服务器以及客户端框架
1 客户端框架客户端就是使用qt编程,例程分析:https://blog.csdn.net/cainiaofu/article/details/1143135262 服务器框架2.1 服务器框架的选择可以采用的方案:多线程,多进程。多路IO复用1)、如果使用多进程服务器,会遇到的问题:用来存储用户登录信息的链表,应该是只有一份的,但是要给所有的进程共享(共享数据链表)。尽管,我们可以使用共享内存的方式来实现,但是,不方便。2)、而采用多线程服务器,那么,这个链表就可以共享了。而且,一个客户端原创 2021-03-05 17:31:58 · 917 阅读 · 0 评论 -
基于QT开发多人聊天项目1: 总体框架分析
1 项目框架1.1 这个项目框架是典型的c/s模型。服务器等待,等待客户端的请求。客户端发送一个请求,服务器端就应答一个请求。如果客户端不发送数据,服务器端是不会主动给客户端发送数据的。1.2 整个项目,客户端用qt来实现;服务器端,用linux+socket的方式来实现。2、功能分析项目要实现三个功能:客户端登录服务器;客户端显示在线列表;与列表中指定人聊天2.1客户端登录服务器功能实现:客户端成功登录以后,服务器要给这个客户端分配一个唯一的id(对于服务器来说,一个id,对应一个在线用户),原创 2021-03-04 16:08:33 · 1225 阅读 · 1 评论 -
在qt下,实现基于udp通信
在qt下,udp通信的客户端和服务器程序是一模一样。我们是分析服务器端即可:#include "widget.h"#include "ui_widget.h"Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget){ ui->setupUi(this); udpSocket = new QUdpSocket; //背景 QPalette palette; pa原创 2021-03-03 21:20:19 · 461 阅读 · 1 评论 -
在qt下,实现基于tcp通信
server:#include "widget.h"#include "ui_widget.h"Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget){ ui->setupUi(this); //实例化通信套接字和监听套接字 tcpServer = new QTcpServer(this); tcpSocket = new QTcpSocket(this); /原创 2021-03-03 14:39:26 · 302 阅读 · 1 评论 -
正点原子imx6ull开发板视频监控项目实战系列6:内网穿透
1、之前几节,我们虽然实现了功能,但是存在这样一个问题。我们将服务器和ffmpeg都是部署在开发板上的,这就要求拉流端和开发板(推流端)必须都在同一个网段中。不能实现,在任意地区访问nginx.解决方法有两个:1)、将nginx放到公网服务器上(设置路由器,在路由器安装内网穿透的软件,有难度)2)、使用内网穿透技术,将开发板暴露在公网中。为什么要用内网穿透的?总得来说,就是:因为局域网内的设备可以主动通过路由器访问互联网里面的某一个网站,之后,局域网设备就可以和互联网之间进行信息的交互。但是互原创 2020-12-28 16:14:01 · 1845 阅读 · 0 评论 -
正点原子imx6ull开发板视频监控项目实战系列5: 摄像头(V4L2)和声卡(ALSA)接口简介
1、摄像头:1)、对于不同的摄像头,有不同的接口方式,eg:USB,CMOS等,但是他们都遵循同样的标准-V4L2.所以,不同的APP可以使用同样的API访问不同硬件接口的摄像头。2)、摄像头参数:分辨率:一幅图片的宽度和高度。数据格式:RGB/YUV.JPEG/MJPEG…帧率:一秒传多少张图片。3)、应用程序通过V4L2接口采集视频数据的步骤:参考博客:https://blog.csdn.net/simonforfuture/article/details/78743800①、打开视频原创 2020-12-28 16:11:14 · 5505 阅读 · 0 评论 -
正点原子imx6ull开发板视频监控项目实战系列4:Nginx服务器的搭建
1、nginx在流媒体方案中的位置推流端:FFmpeg使用RTMP协议向Nginx推流拉流端:VLC播放器使用RTMP或HTTPFLV协议从Nginx拉流浏览器使用HTTPFLV协议从Nginx拉流(安装flv.js)2、移植Nginx到开发板1)、nginx本来是不支持RTMP,HTTPFLV协议,为了让nginx支持RTMP,HTTPFLV协议,我们需要第三方模块,这个第三方模块目前有两种:①、nginx-rtmp-module:实现了RTMP协议②、(中国的)nginx-http-原创 2020-12-28 16:04:23 · 1618 阅读 · 0 评论 -
正点原子imx6ull开发板视频监控项目实战系列3: ffmpeg
1、Ffmpeg是什么?(1)、一套开源软件(2)、可以记录,转换音视频:可以从摄像头中,记录视频,从声卡中,记录音频。可以转换成各种格式,保存起来。(3)、好多视频播放器的内核就是FFmpeg。2、FFmpeg的简易理解:这个流程的文字描述大概是这样的:1)、从摄像头得到的原始的视频数据,但是数据太大,不易传输,需要压缩。对于视频,使用视频的编解码器进行压缩;从声卡到的也可以原始的声音数据,但是数据太大,不易传输,需要压缩。对于音频,使用音频的编解码器进行压缩;(原始层+编码层)2)、压原创 2020-12-28 15:59:26 · 3478 阅读 · 0 评论 -
正点原子imx6ull开发板视频监控项目实战系列2: MJPG-Streamer方案的实现及原理分析
MJPG-Streamer简介:JPEG(简称JPG):使用RGB、YUV格式编码出来的图片,文件都比较大。常见的BMP文件就是RGB编码。通过将BMP文件转成JPEG文件,大大的减小了文件的大小,但是画面的质量并不会发生什么变化。MJPG:JPEG是静态图片的编码格式;MJPG是动态视频的编码格式。可以简单的理解,MJPG就是把多个JPEG图片连续显示出来。MJPG的优点:很多摄像头本身就支持JPEG,MJPG,所以处理器不需要做太多的处理。一般的低性能的处理器就可以传输MJPG视频流。M原创 2020-12-28 15:52:36 · 3051 阅读 · 2 评论 -
正点原子imx6ull开发板视频监控项目实战系列1: 总体方案介绍
前言:本项目借鉴正点原子、韦东山老师、讯为电子和众多大牛的博客的资料,如果有侵权,还请告知。若情况属实,我将第一时间删除道歉。正文:方案1:在局域网内实现视频监控:这种方案,我们需要写两个程序:1)、在连接摄像头的ARM板子上,实现一个服务器程序:它一边读取摄像头数据,一边等待客户端连接并发送数据。可以用两个线程实现,一个负责采集图像信息;一个负责等待链接,并发送数据。2)、在手机或电脑上,编写客户端程序,它会从ARM板上获得数据并显示出来。同样,也可以用两个线程来实现。一个负责接受数据,一个负原创 2020-12-28 15:32:46 · 6972 阅读 · 0 评论 -
ARM开发板实战项目:在arm板部署tcp服务器,实现多人聊天
项目演示视频:客户端和服务端的编写过程如下:https://blog.csdn.net/cainiaofu/article/details/114370649客户端和服务端的代码如下:https://download.csdn.net/download/cainiaofu/15686451注:客户端是基于QT编写,服务器端是基于C语言编写。在客户端中,将IP写成是开发板IP,端口号和服务器端程序中的端口号一致即可。服务器端,将代码交叉编译,使代码可以在arm架构下运行。然后放到跟文件系统的目录原创 2021-03-09 19:39:44 · 641 阅读 · 1 评论 -
ARM开发板基于udp通信项目实战 2:项目总结(linux下udp编程和qt下udp编程的对比分析)
1、linux下的udp:UDP的c/s模型:相比于tcp,udp编程,客户端connect()函数以及服务端的accept()函数被舍弃;另外:listen()函数是设置同时监听的上限数。因此,在udp中,服务器端的listen()函数,可有可无!!服务端: lfd = socket(AF_INET,SOCK_DGRAM,0); bind(); listen(); 这个函数是设置同时监听的上限数。在udp中,可有可无(用不上)!! while(1){ recvfr原创 2021-03-03 21:35:51 · 498 阅读 · 1 评论 -
ARM开发板基于udp通信项目实战 1:总体描述
项目最终的效果,见视频:https://www.bilibili.com/video/BV1oX4y1G7L4/整体分析:QT下的udp通信1、流程图:2、框架介绍2.1 udp通信在qt中,实质没有客户端和服务器端的概念。因为对于udp(udp是面向无连接的)来说,客户端和服务器端的地位是相等的,因此,二者的代码也是一模一样的。2.2 udp通信在qt中,只有绑定以后,才可以接收数据;不绑定,只能发送数据。3、源码分析见博客:https://blog.csdn.net/cainiao原创 2021-03-03 21:28:56 · 417 阅读 · 1 评论 -
ARM开发板基于tcp通信项目实战 2:项目总结(linux下tcp编程和qt下tcp编程的对比分析)
1、TCP编程需要用到两个类:1.1 QtcpServer和QtcpSocket.TCP分为客户端和服务端。客户端用到QtcpSocket类;服务端用到了QtcpServer和QtcpSocket类。1.2、在编程之前,我们先了解一下这两个类的作用:QTcpServer:监听套接字,用于监听是否有客户端的连接。QTcpSocket:通信套接字,用于实现数据的收发,属于设备IO类。扩展:在QT中,提供IO设备类,这些设备具有读写子块的能力,提供了读写子块的接口:2、linux下的tcp通信2原创 2021-03-03 14:49:19 · 1156 阅读 · 1 评论 -
ARM开发板基于tcp通信项目实战 1:总体描述
项目最终的效果,见视频:https://www.bilibili.com/video/BV1ZX4y1G7uG/整体分析:QT下的tcp通信1、流程图:2、文字注释:在QT中,同样会使用三个套接字。服务器两个(监听套接字和通信套接字),客户端一个(通信套接字)。1)、服务器首先创建一个监听套接字。2)、当监听套接字接受到客户端的连接,会自动触发newconnect()信号,在对应的槽函数中,产生通信套接字。3)、如果是数据传送成功,对方的通信套接字会触发readyread()信号,需要在自原创 2021-03-03 14:36:58 · 410 阅读 · 1 评论 -
I.MX6ULL开发板基于阿里云项目实战 6:遇到的问题,解决方法及项目总结
总体里说,阿里云IOT-SDK的编译,遇到的问题还是很少的。只要保证所使用的编译器和编译内核按照官网提供的例程,可以正确编译。我遇到的问题,是在修改源码的过程中。问题1:服务器推送的数据成功解析(控灯指令),但是灯没有反应。见下图:原因分析:我们是使用write()函数对led设备节点将进行操作的。既然能够解析,就说明数据的推送没有问题,问题应该出来write()函数。分析write()函数:函数原型:ssize_t write(int fd, const void *buf, size_t c原创 2021-03-01 20:13:59 · 877 阅读 · 0 评论 -
I.MX6ULL开发板基于阿里云项目实战 1:总体框架描述
全部资料:1、https://blog.csdn.net/cainiaofu/article/details/114262377?spm=1001.2014.3001.55012、https://download.csdn.net/download/cainiaofu/155042601、设备和服务器之间的框架1.1、Mqtt:总结就是基于topic的发布和推送的协议(topic就相当于是名字)通过向指定的topic发送消息的方式将数据发送到阿里云物联网平台,也可以通过订阅指定的topic从阿里云原创 2021-03-01 17:58:44 · 879 阅读 · 0 评论 -
I.MX6ULL开发板基于阿里云项目实战 5:修改阿里云IOT-SDK源码,实现将板载AP3216C三合一环境光传感器数据上报至服务器
修改后的全部代码:https://blog.csdn.net/cainiaofu/article/details/114262377?spm=1001.2014.3001.55011、编写AP3216C三合一环境光传感器驱动,生成设备节点我的设备节点是:/dev/AP3216C2、源码的修改注:源码位于src/mqtt/example/mqtt_example.c,在此基础上进行修改。int example_publish(void *handle){ int res = 0;原创 2021-03-01 17:30:03 · 275 阅读 · 0 评论 -
I.MX6ULL开发板基于阿里云项目实战 4:修改阿里云IOT-SDK源码,实现通过阿里云物联网平台控制LED亮灭
修改后的全部代码:https://blog.csdn.net/cainiaofu/article/details/114262377?spm=1001.2014.3001.55011、首先,编写LED驱动,生成设备节点我的led设备系节点是:/dev/dtsled2、修改源码注:源码位于src/mqtt/example/mqtt_example.c,在此基础上进行修改。//云端下发数据函数 void example_message_arrive(void *pcontext, void *p原创 2021-03-01 17:21:36 · 499 阅读 · 0 评论 -
阿里云IOT-SDK源码修改:可用于arm开发板,实现和阿里云相互发布和订阅的代码分析
#include "dev_sign_api.h"#include "mqtt_api.h"#include <string.h>#include <stdio.h>#include <stdlib.h>#include <cJSON.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h> char DEMO_PRODUCT_KEY[原创 2021-03-01 14:38:43 · 700 阅读 · 0 评论 -
阿里云IOT-SDK源码历程分析
文件路径:src/mqtt/examples/mqtt_example.c阿里云快速体验手册:https://help.aliyun.com/document_detail/96624.html?spm=a2c4g.11186623.2.15.69a27165DXIxEK我们使用“以MQTT Topic编程方式接入设备”直接使用MQTT TOPIC与物联网平台通信的流程示意图如下:1、创建产品和设备参考博客:https://blog.csdn.net/cainiaofu/article/de原创 2021-03-01 12:14:29 · 928 阅读 · 0 评论 -
I.MX6ULL开发板基于阿里云项目实战 3 :阿里云iot-SDK 移植到arm开发板
上一篇博客讲的是在ubuntu下进行测试,本讲,我们将里云iot-SDK 移植到arm开发板。原创 2021-02-27 20:11:13 · 695 阅读 · 1 评论 -
I.MX6ULL开发板基于阿里云项目实战 2 :创建产品和设备,开发APP
流程介绍:1、登录阿里云,创建设备2、下载阿里云IOT-SDK源码3、配置源码,准备编译make reconfig选择3,先在ubuntu下编译测试4、make编译生成的可执行文件在./output/release/bin/mqtt-example。我们运行一下。这个demo默认发送hello world.5、打补丁。通过这个补丁,我们可以实现通过mqtt协议,与阿里云物联网平台进行信息交互。例程对阿里云平台发送的有效负载json数值及字符串进行解析,同时上报随机产生的温湿度数据。再次原创 2021-02-27 19:19:47 · 722 阅读 · 1 评论 -
正点原子I.MX6ULL开发板车牌识别项目实战 3:遇到的问题及解决方法
1 关于openssl遇到的问题1.1 arm-linux-gnueabihf-gcc: error: unrecognized command line option ‘-m64’解决方法:在顶层的Makefile中,找到有 '-m64’的地方(两处),将其删除。1.2 arm-linux-gnueabihf-gcc: not found解决方法:在Mkkefile中,将编译器arm-linux-gnueabihf-gcc的路径写成绝对路径的形式。2 关于curl遇到的问题烧写到开发板以后,报原创 2021-02-09 19:58:42 · 1757 阅读 · 0 评论 -
正点原子I.MX6ULL开发板车牌识别项目实战 2:应用程序的编写
1 程序流程图在编写应用程序之前,先分析一下程序的执行流程:2 重要函数2.1 打开摄像头cvCreateCameraCapture(1);2.2 从摄像头获取一帧图片cvQueryFrame(camera);2.3 调用百度云车牌识别函数client.license_plate(image, aip::null);2.4 图片格式转换函数(将图片格式转换成QImage格式,否则不能再lable上显示) imag = QImage((const uchar*)frame->原创 2021-02-09 18:39:26 · 1306 阅读 · 3 评论 -
正点原子I.MX6ULL开发板车牌识别项目实战 1
1 项目总体概述下图为 车牌识别项目 的系统框图。借助这个框图,简要介绍项目的总体思路和所需要做的准备工作。1.1 总体思路通过摄像头采集图像信息,并将图像信息传递开发板(这里使用的是OpenCv)。开发板收到图像信息之后,通过定时器,周期调用百度AI的接口,将图像信息发送给百度云,进行图像识别,同时,待识别的图片还会显示在开发板的屏幕上。识别成功后,车牌识别的结果会显示在屏幕上。效果图如下图所示:1.2 准备工作1)、在PC端搭建好Qt环境。2)、将Qt所使用的库拷贝到根文件系统中,并设置原创 2021-02-09 17:56:23 · 4092 阅读 · 2 评论