Linux项目:音乐播放器

Posted 森明帮大于黑虎帮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux项目:音乐播放器相关的知识,希望对你有一定的参考价值。

1.项目介绍

音乐播放器拥有注册登录功能,查看所有的音乐列表,也可以听音乐,也可以将音乐添加到自己的喜欢列表。

2.前端代码

1.httplib快速搭建一个http服务器

     1	#include<stdio.h>
     2	#include<iostream>
     3	
     4	#include<string.h>
     5	#include"httplib.h"
     6	
     7	using namespace httplib;
     8	using namespace std;
     9	
    10	int g_val=100;
    11	
    12	void Get_CallBackFunc(const Request& req, Response& resp)
    13	{
    14	    printf("%d\\n",g_val);
    15	    cout<<req.method<<endl;
    16	    printf("i am Get_CallBackFunc\\n");
    17	    
    18	    const char* lp="<html><h2>hello world!</h2></html>";
    19	    resp.set_content(lp,strlen(lp),"text/html");
    20	}
    21	
    22	
    23	
    24	int main()
    25	{
    26	    Server http_svr;
    27	    int a=10;
    28	
    29	    http_svr.Get("/abc",Get_CallBackFunc);
    30	    http_svr.Post("/111",[a](const Request& req,Response& resp){
    31	            printf("a:%d\\n",a);
    32	
    33	    });
    34	    //直接访问web里面的文件
    35	    //逻辑根目录指定为web文件夹
    36	    http_svr.set_mount_point("/","./web");
    37	    http_svr.listen("0.0.0.0",21010);
    38	
    39	    return 0;
    40	}


2.B/S双方的数据交互选择JSON数据格式,http请求和响应的正文中采用jsoncpp开源库


     1	#include<stdio.h>
     2	#include<iostream>
     3	#include<jsoncpp/json/json.h>
     4	
     5	using namespace std;
     6	
     7	int main()
     8	{
     9	
    10	    Json::Value v1;
    11	    v1["id"]=1;
    12	    v1["name"]="yyw";
    13	    cout<<v1<<endl;
    14	
    15	    Json::Value v2;
    16	    v2["id"]=2;
    17	    v2["name"]="yy";
    18	    cout<<v2<<endl;
    19	
    20	    Json::Value v3;
    21	    v3["v1"]=v1;
    22	    v3["v2"]=v2;
    23	    cout<<v3<<endl;
    24	
    25	    Json::Value v4;
    26	    v4.append(v1);
    27	    v4.append(v2);
    28	    cout<<v4<<endl;
    29	
    30	    for(int i=0;i<2;i++)
    31	    {
    32	        cout<<v4[i]["id"]<<":"<<v4[i]["name"]<<endl;
    33	    }
    34	
    35	    //序列化
    36	    Json::FastWriter w;
    37	    string json_str=w.write(v4);
    38	    cout<<json_str<<endl;
    39	    //反序列化
    40	    Json::Reader r;
    41	    Json::Value vv;
    42	    r.parse(json_str,vv);
    43	    cout<<vv<<endl;
    44	    return 0;
    45	}

JSON数据格式有三种显示方法:平铺、嵌套、数组形式。



序列化和反序列化:

3.前段的js代码向发送ajax请求

#include<stdio.h>
#include<iostream>

#include<jsoncpp/json/json.h>
#include<string.h>
#include"httplib.h"

using namespace httplib;
using namespace std;

int g_val=100;

void Get_CallBackFunc(const Request& req, Response& resp)
{
    printf("%d\\n",g_val);
    cout<<req.method<<endl;
    printf("i am Get_CallBackFunc\\n");
    
    const char* lp="<html><h2>hello world!</h2></html>";
    resp.set_content(lp,strlen(lp),"text/html");
}



int main()
{
    Server http_svr;

    http_svr.Get("/abc",Get_CallBackFunc);
    //发送post请求/login,回调这个表达式
    http_svr.Post("/login",[](const Request& req,Response& resp){
            cout<<req.body<<endl; //打印正文信息

            Json::Value resp_json;
            resp_json["login_status"]=true;  //浏览器返回登录状态
            
            //序列化
            //系列化成完整的字符串的内容放到响应的正文中
            Json::FastWriter w;
            resp.body= w.write(resp_json);
            //告诉浏览器返回的内容就是json串,对json解析
            resp.set_header("Content-Type","application/json");
    });
    //直接访问web里面的文件
    //逻辑根目录指定为web文件夹
    http_svr.set_mount_point("/","./web");
    http_svr.listen("0.0.0.0",21010);

    return 0;
}



三、服务端代码

1.搭建一个music_player这样的一个类

     1	#pragma once
     2	#include"database.hpp"
     3	#include<stdio.h>
     4	#include<iostream>
     5	#include<string>
     6	#include"httplib.h"
     7	
     8	#include<jsoncpp/json/json.h>
     9	
    10	using namespace std;
    11	
    12	using namespace httplib;
    13	
    14	#define MUSIC_SVR_IP "0.0.0.0"
    15	#define MUSIC_SVR_PORT 18989
    16	
    17	class MusicServer
    18	{
    19	    public:
    20	        MusicServer()
    21	        {
    22	            svr_ip_=MUSIC_SVR_IP;
    23	            svr_port_=MUSIC_SVR_PORT;
    24	            db_svr_=NULL;
    25	        }
    26	        ~MusicServer()
    27	        {
    28	
    29	        }
    30	
    31	        //1.初始化当前类接
    32	        int InitMusicServer(string ip=MUSIC_SVR_IP,uint16_t port=MUSIC_SVR_PORT)
    33	        {
    34	            svr_ip_=ip;
    35	            svr_port_=port;
    36	
    37	            db_svr_=new DataBaseSvr("1.14.165.138","yy","123","music_svr");
    38	            if(db_svr_==NULL)
    39	            {
    40	                return -1;
    41	            }
    42	            return 0;
    43	        }
    44	        //2.启动服务的接口
    45	        int StartMusicServer()
    46	        {
    47	            //1.注册个若干个http请求的对应的回调函数
    48	            /*
    49	             *请求:{"name":"yy","passwd":"123","email":"123@qq.com","phonenum":"1231"}
    50	             *响应:{"register_status":"xxxx"}
    51	             *
    52	             *
    53	             * */
    54	            http_svr_.Post("/register",[this](const Request& req,Response& resq){
    55	                    cout<<req.body<<endl;
    56	                    //1.需要将浏览器中的数据持久化(保存在数据库中) 
    57	                    //
    58	                    //1.将用户提交的数据进行反序列化,拿到一个json对象
    59	                    Json::Reader r;
    60	                    Json::Value v;
    61	                    r.parse(req.body,v);
    62	
    63	                    cout<<v["name"]<<endl;
    64	                    cout<<v["passwd"]<<endl;
    65	                    cout<<v["email"]<<endl;
    66	                    cout<<v["phonenum"]<<endl;
    67	
    68	                    db_svr_->InsertUserInfo(v);
    69	                    });
    70	
    71	            http_svr_.Post("/login",[](const Request& req,Response& resq){
    72	                /*
    73	                 *1.
    74	                 *2.
    75	                 *3.
    76	                 * */
    77	            cout<<req.body<<endl;
    78	
    79	            });
    80	
    81	            //2.设置http服务器静态路径(逻辑根目录)
    82	            http_svr_.set_mount_point("/","./web");
    83	            //3.监听起来
    84	            http_svr_.listen(svr_ip_.c_str(),svr_port_);
    85	        }
    86	    private:
    87	        //httplib 当中的server对象
    88	        Server http_svr_;
    89	
    90	        string svr_ip_;
    91	        uint16_t svr_port_;
    92	
    93	        //数据库操作模块
    94	        DataBaseSvr* db_svr_;
    95	};

2.增加注册按钮,并且点击注册按钮跳转到注册界面

    54	            http_svr_.Post("/register",[this](const Request& req,Response& resq){
    55	                    cout<<req.body<<endl;
    56	                    //1.需要将浏览器中的数据持久化(保存在数据库中) 
    57	                    //
    58	                    //1.将用户提交的数据进行反序列化,拿到一个json对象
    59	                    Json::Reader r;
    60	                    Json::Value v;
    61	                    r.parse(req.body,v);
    62	
    63	                    cout<<v["name"]<<endl;
    64	                    cout<<v["passwd"]<<endl;
    65	                    cout<<v["email"]<<endl;
    66	                    cout<<v["phonenum"]<<endl;
    67	
    68	                    db_svr_->InsertUserInfo(v);
    69	                    });

3.服务端代码当中调用mysql-c api连接数据库,进行操作

    1	#pragma once
     2	#include<stdio.h>
     3	#include<unistd.h>
     4	#include<iostream>
     5	#include<string>
     6	
     7	#include<mysql/mysql.h>
     8	#include<jsoncpp/json/json.h>
     9	using namespace std;
    10	class DataBaseSvr
    11	{
    12	    public:
    13	        DataBaseSvr(const string& db_host,const string& db_user,const string& db_password,const string& db_name,unsigned int db_port=3306)
    14	        {
    15	            mysql_init(&mysql_);
    16	            db_host_=db_host;
    17	            db_user_=db_user;
    18	            db_password_=db_password;
    19	            db_port_=db_port;
    20	            db_name_=db_name;
    21	        }
    22	        ~DataBaseSvr()
    23	        {
    24	
    25	        }
    26	
    27	        int ConnectToMysql()
    28	        {
    29	            if(!mysql_real_connect(&mysql_,db_host_.c_str(),db_user_.c_str(),db_password_.c_str(),db_name_.c_str(),db_port_,NULL,CLIENT_FOUND_ROWS))
    30	            {
    31	                cout<<mysql_error(&mysql_)<<endl;
    32	                return -1;
    33	            }
    34	            return 0;
    35	        }
    36	
    37	        //提交上来的对象
    38	        int InsertUserInfo(const Json::Value& v)
    39	        {
    40	            //1.连接数据库
    41	            if(ConnectToMysql()<0)
    42	            {
    43	                return -1;
    44	            }
    45	            //2.组织sql语
    46	            
    47	            string name=v["name"].asString();
    48	            string password=v["password"].asString();
    49	            string email=v["email"].asString();
    50	            string phonenum=v["phonenum"].asString();
    51	
    52	#define INSERT_USER_INFO  "insert into sys_user(user_name,password,email,phone_num) values('%s','%s','%s','%s');"
    53	
    54	            char sql[1024]={0};
    55	            snprintf(sql,sizeof(sql)-1,INSERT_USER_INFO,name.c_str(),password.c_str(),email.c_str(),phonenum.c_str());
    56	            cout<<"sql:"<<sql<<endl;
    57	
    58	            //3.继续执行sql
    59	            //4.返回插入结果给调用者
    60	        }
    61	    private:
    62	        MYSQL mysql_;
    63	
    64	        string db_host_;
    65	        string db_user_;
    66	        string db_password_;
    67	        string db_name_;
    68	        unsigned int db_port_;
    69	};

4.登录查询用户是否存在校验邮箱和密码

	//查询用户是否存在
   105	       int QueryUserExist(const Json::Value& v)
   106	        {
   107	           /* //0 链接
   108	            if(ConnectToMysql()<0)
   109	            {
   110	                return -1;
   111	            }*/
   112	            //1.从json对象当中解析出来 邮箱和密码
   113	
   114	            string email = v["email"].asString();
   115	            string password = v["password"].asString();
   116	
   117	            //2.使用邮箱作为查询条件在sys_user表当中进行查询(如果没有查找到用户,则返回)
   118	#define QUERY_USER "select * from sys_user where email='%s';"
   119	            char sql[1024] = {0};
   120	            snprintf(sql, STM32MP157开发板Linux+Qt项目实战:音乐播放器

linux虚拟机下bash shell编程,制作一个音乐播放器,可以实现用代码打开mp3文件吗?

Audio Ducking 后音乐更柔和?

MPlayer音乐播放器项目讲解

项目: 用C语言写一个音乐播放器

linux下用啥命令来播放音乐阿?