オンライン音楽プレーヤーのシミュレーション(ソケット+データベース)

オンライン音楽プレーヤーのシミュレーション(データベース+ソケット(TCPプロトコル))

1、クライアントとサーバーのプログラムを記述するために、それぞれ、C / Sアーキテクチャ設計を使用して、

図2は、クライアントリンクサーバーた後、サーバは、ユーザが選択した後(オーディオファイルがローカルに保存することができます)再生を開始するかを選択することができ、ユーザに曲のリストを要求します。あなたは、一時停止、曲や他の機能には必要ありません。

図3に示すように、パッケージは、共通のツールモジュール(の.pyファイル)として機能する必要があり、通話に供します

 

データベースのデータを作成します。1.

1  1。データベースの作成。
 2を    作成し 、データベースソング;
 3     使用ソング;
 4  
5。 2 テーブルを作成する。
 6。    作成 テーブル(t_listを
 7。     ID INT   キーAUTO_INCREMENT、
 8。VARCHAR32はありません ヌル9。     リンクVARCHAR2000ていない ヌル
10     ); 
。11 。3 。データベースのデータを呼び出す)が(後で再生ファイルのために、コンピュータ上のローカルリンクパスの音楽ファイルを置くために後者のフィールドの必要性を挿入されている 12 挿入 t_list(名前、リンク)の値' stay_with_me '' /Users/.../StayWithMe.mp3 ' ); 13 インサート t_list(名前、リンク)の値' 仮想暴動リフトMe_Up '' /Users/.../VirtualRiotLiftMe_Up.mp3 ' )。 14 インサート t_list(名前、リンク)の値' 阿刁'' /Users/.../阿刁.MP3 ')。

 

いくつかの簡単なパッケージを行うには、データベース内の関数の.pyファイル2.(db_helper.py)

1  インポートpymysql
 2  
3。 
4。 DEF get_conn():個別に包装するためにデータベースに#接続
 5。      CON = pymysql.connect(
 6。          HOST = ' ローカルホストを' 7。          ユーザー= ' ルート' 8。          パスワード= '123123 ' 9。          DB = ' ' 、データベース名は、#DBクエリーの所望の値に等しい
 10          のcharset = ' UTF8 ' 
。11  12であり、     リターンCON
 13のIS 
14  
15  DEF SEARCH_S(SQL):#はパッケージの機能を行うためにデータベースに照会
 16      CON = get_conn()
 17。      カーソル= con.cursor()
 18は     cursor.execute(SQL)
 19。      データ= cursor.fetchall()
 20が     リターンデータ
 である21  
22がある 
23のIS  DEF instert_s(SQL):#パッケージを製造するためにデータベースにデータを挿入する(以下で存在する)
 24      CON = get_conn()
 25      カーソル= con.cursor()
 26は     cursor.execute(SQL)
 27      (con.commit)

 

3.書き込みソケットサーバ

  主な機能:ソケットクライアント通信と、曲のクライアントデータベースのリストに送信され、ユーザーが選択した曲の数、データベースからサーバークエリクライアントに歌に対応するローカルパスに

1  からソケットインポート *
 2  から db_helper インポート *#の.pyファイル名db_helperパッケージデータベース機能を上回っている
 。3  インポート構造体
 。4  
。5  
。6サーバー= 一般設定ソケット()#ソケットサーバ
 7 server.setsockopt(SOL_SOCKET、SO_REUSEADDR ,. 1 。8 server.bind((""、8081 ))
 。9。server.listen(5 10  
。11  プリント' サーバ起動... ' 12は、 
13であり 、一方TRUE:
 14      LST =[]
 15      合計= '' 
16  
。17      newsocket、ADDR = server.accept()
 18である      recv_data = newsocket.recv(1024 。19  
20      DB_DATA = SEARCH_S(' SELECT ID、t_listから名前' )db_helper位コールクエリ方法データベースIDから取得し、歌
 21である 
22れる     ため I DB_DATA:
 23であり、          (I [0])=新しい新しいSTR + '  ' + I [1 ]
 24          lst.append(新しい新しい)
 25  
26である      合計= ' ' .join (LST)
 27     = name_len LEN(合計)
 28  
29      長struct.packは=(' I ' クライアントに文字列#構造体のパッケージの長さによって、name_len)(サーバが問題のDIPパッケージを解決するためのソケット)
 30      newsocket.send(長さ)
 31がある     newsocket .send(total.encode())
 32  
33は、      SELECT1 = newsocket.recv(1024 34である      S = select1.decode()
 35      db_data1 SEARCH_S =(F ' ID = {S}からSELECT t_listリンク' )、取得したユーザ#楽曲IDを選択した後、リンクに対応する曲のデータベース照会する
 36  
37 [      クライアントリンクにnewsocket.send(db_data1 [0] [0] .encode())#の送信を

 

4.ソケットクライアント

  スタート通信ソケットサーバーでローカルの音楽ファイルを再生し、サーバーとプリントによって送信されたデータは、サーバに曲番号を選択するようにユーザーに送る受け、リンクへのアクセス:主な機能

1つの インポートソケット
 2  インポートサブプロセス
 3  インポート構造体
 4  
5 LST = []
 6  
7クライアント= socket.socket()#ソケット客户端常规设置
 8 client.connect((' 127.0.0.1 '、8081 ))
 9  
10  ながらTRUE:
 11      client.send(' song_list ' .encode())
 12      recv_num = client.recv(4 13      TOTAL_SIZE = struct.unpack(' I ' 、recv_num)[0]
14  
15      recv_size = 0
 16      recv_msg = B ' 
17  
18      ながら recv_size < TOTAL_SIZE:
 19  
20          every_recv = client.recv(1024 21          recv_msg + = every_recv
 22          recv_size + = LEN(every_recv)
 23  
24      DATA1 = recv_msg.decode()
 25  
26      LST1 = data1.split(' ' 27  
28      のためにLST1:
 29          プリントソングリストを印刷するために、サーバから受信した(I)#
 30      BREAK 
31は、 
32  トライ33は、      選択し= INPUT(' :IDを入力してください' .strip())
 34である 
35      client.send(choose.encode())
 36      名=クライアント.recv(1024 ).decode()曲#ローカルパスは、サーバから送信される
 、[37  
38れる     プリント' ソング再生... ' 39      RETURN_CODE subprocess.call =([ " afplay " 、ファイル名])
 40  
41である     client.close ()
 42は 
43である 以外は例外:
 44であります     パス

おすすめ

転載: www.cnblogs.com/wuaihua/p/12200041.html