模拟一个在线音乐播放程序
- # 1, 使用 C/S 架构来进行设计, 分别写出客户端和服务器程序
- # 2, 客户端链接服务器之后, 服务器向用户提示可以选择的歌曲列表, 用户选择后开始播放(音频文件存放在本地即可)
- #思路是通过 socketserver , 客户端发送指令到服务端, 服务端连接数据库查到歌曲名字路径返回给客户端, 客户端通过 pygame 模块查找到歌曲路径 播放歌曲
- # 创建数据表, 插入歌曲名字和路径
- CREATE TABLE t_music(
- id INT PRIMARY KEY AUTO_INCREMENT,
- NAME VARCHAR(32),
- path VARCHAR(32)
- )
- SELECT * FROM t_music
- INSERT INTO t_music(NAME,path) VALUE("味道","D:\\\\ 老男孩 \\\\ 味道. mp3"),("世间美好与你环环相扣","D:\\\\ 老男孩 \\\\ 世间美好与你环环相扣. mp3")
服务端:
- import pymysql
- import JSON
- import socketserver
- class MyServer(socketserver.BaseRequestHandler):
- @classmethod
- def conn(cls,name):
- conn = pymysql.connect(host="localhost", user="root", password="123456", db="music", charset="utf8")
- cur = conn.cursor()
- sql = "select path from t_music where name='%s'" % name
- cur.execute(sql)
- data = cur.fetchall()
- return data
- @classmethod
- def conn2(cls):
- conn = pymysql.connect(host="localhost", user="root", password="123456", db="music", charset="utf8")
- cur = conn.cursor()
- sql = "select name from t_music"
- cur.execute(sql)
- data = cur.fetchall()
- mydic = {}
- lst = []
- for i in data:
- for j in i:
- print(i[0])
- lst.append(i[0])
- for k, v in enumerate(lst):
- mydic[k] = v
- a = JSON.dumps(mydic)
- return a
- def handle(self):
- while True:
- data = self.request.recv(1024)
- print('->client',data)
- if data.decode() == 'a':
- # pass
- self.request.send(self.conn2().encode())
- else:
- self.request.send(self.conn(data.decode())[0][0].encode())
- socketserver.TCPServer.allow_reuse_address = True
- server = socketserver.ThreadingTCPServer(('127.0.0.1', 8080), MyServer)
- server.serve_forever()
客户端:
- import socket
- import JSON
- client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- client.connect(('127.0.0.1', 8080))
- def broadcast(): # broadcast 播放
- import pygame
- import time
- pygame.mixer.init() #初始化
- pygame.mixer.music.load(data1) # 通过路径 path 加载
- pygame.mixer.music.play() #在程序运行中会播放
- # print("正在播放的歌曲:%s" % name)
- time.sleep(100) #让程序保持运行状态
- while True:
- name =input("请输入 a 获取歌曲列表或歌曲名字播放:")
- client.send(name.encode('utf-8'))
- data1 = client.recv(1024).decode('utf-8')
- if name =='a':
- data2 =JSON.loads(data1)
- print(data2)
- else:
- print(data1)
- broadcast()
- # 使用 mixer 播放音效
- # 山楂树之恋 世间美好与你环环相扣 味道
来源: http://www.bubuko.com/infodetail-3383758.html