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项目实战:音乐播放器