온라인 음악 플레이어의 시뮬레이션 (소켓 + 데이터베이스)

온라인 음악 플레이어의 시뮬레이션 (데이터베이스 + 소켓 (TCP 프로토콜))

1은 C / S 아키텍처 설계를 사용하여, 각각의 클라이언트와 서버 프로그램을 작성하는

2, 클라이언트 연결된 서버 후, 서버는 사용자가 선택한 후 (오디오 파일을 로컬로 저장 될 수있다) 재생을 시작하도록 선택할 수 있습니다 사용자에게 노래 목록을 묻는 메시지를 표시합니다. 당신은 일시 정지, 노래 및 기타 기능에 필요하지 않습니다

도 3에서, 패키지들은 공통 툴 모듈 (평 파일)로서 기능해야하며 통화 실시

 

데이터베이스의 데이터를 만들기 1

. 1  1. 데이터베이스 만들기.
 (2)를     작성  데이터베이스 노래;
 . 3     사용 의 노래;
 . 4  
. 5  2 . 테이블을 만듭니다
 . (6)     작성  테이블 (t_list를
 . 7     ID INT   AUTO_INCREMENT,
 . 8     이름 VARCHAR ( 32 ) 아니  ,
 . 9     링크 VARCHAR ( 2000 ) 아니  널 (null) 
(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 ' );

 

몇 가지 간단한 패키지를 할 수있는 데이터베이스의 기능 평 파일 2. (db_helper.py)

. 1  가져 오기 pymysql
 2  
3.  
4.  DEF get_conn () : #은 개별 포장하기 위해 데이터베이스에 연결
 . 5      = CON을 pymysql.connect (
 . 6          호스트 = ' 로컬 호스트를 ' ,
 . 7          사용자 = ' 루트 ' ,
 . 8          암호를 = '123123을 ' ,
 . 9          DB = ' 노래 ' , 데이터베이스 이름 # DB 조회의 목표 값과 동일한
 10          캐릭터 = ' UTF8 ' 
. 11      )
 (12)가      복귀 CON
 13 인 
14  
15  DEF의 search_s (SQL) # 패키지 기능하도록 데이터베이스를 쿼리
 16      CON이 = get_conn ()
 . (17)는      커서 = con.cursor ()가
 18 인      cursor.execute (SQL)
 . 19      데이터 = cursor.fetchall ()
 (20)는      리턴 데이터
 (21)가  
22 인  
23을  DEF instert_s (SQL) 데이터베이스에 데이터를 삽입 # 1 (이하에서 본) 패키지를 만드는
 24      CON = get_conn ()
 25      커서 = con.cursor ()
 (26)는      cursor.execute (SQL)
 27      con.commit ()

 

3. 쓰기 소켓 서버

  주요 기능 : 소켓 클라이언트 통신과 노래의 클라이언트 데이터베이스 목록으로 전송이 곡 번호는 사용자가 선택한 로컬 경로로 데이터베이스에서 서버 쿼리는 클라이언트에 노래에 해당하는

. 1  에서 소켓 가져 오기 *
 2  에서 db_helper 가져 오기 * 평 파일 이름 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가  그동안 참 :
 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는          새로운 신규 STR = (I [0]) + '  ' + I [1. ]
 24          lst.append (새로운 신규)
 (25)  
(26)는      총 = ' & ' .join을 (LST)
 27     = name_len 렌 (총)
 (28)  
(29)      길이 다음 struct.pack = ( ' I ' 는 name_len) 클라이언트에 문자열 # 구조체 패키지의 길이는 (서버가 문제를 딥 패키지를 해결 소켓)
 (30)      newsocket.send (길이)
 (31)는      newsocket .send (total.encode는 ())
 (32)  
(33)는      선택 1 = newsocket.recv (1024 )
 34되는      S = select1.decode ()
 35      db_data1의 search_s = (F ' {S} WHERE ID =로부터 링크 t_list SELECT ' 취득한 사용자 #) 곡 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)  동안 참 :
 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 = (1,024 )
 21          recv_msg + = every_recv
 22          recv_size + = LEN (every_recv)
 23  
24      DATA1 = recv_msg.decode ()
 25  
26      lst1 data1.split = ( ' & ' )
 (27)  
(28)      에 대한 I 에서 lst1 :
 29          프린트(i)는 상기 서버로부터 수신 # 노래리스트를 출력하는
 30      BREAK 
31이고  
32  은 try :
 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