花了几天时间,写了一个简陋的远程播放器,服务器在虚拟机中,客户端则使用QT来实现,下面是部分代码展示(main.cpp)。
/*
函数功能:执行音乐播放器程序,创建线程
函数参数:命令行输入的路径
函数返回值:0
*/
int main(int argc,char *argv[]){
int ret;
char s[32];
strcpy(s,argv[1]); //若输入的不是路径,则报错.
if(argc != 2){
printf("Usage : ./main PATH\n");
exit(1);
}
Player *play = Player::GetPlayer(argv[1]); //创建播放器对象
pthread_t tid;
pthread_create(&tid,NULL,ClientHandler,&s); //创建线程
cout<<argv<<endl;
cout<<argv[1]<<endl;
play->Mainhandler(argv[1]);
}
/*
函数功能:线程,执行QT界面的命令行界面
函数参数:传递地址
函数返回值:无
*/
void *ClientHandler(void *arg){
char *path = (char*) arg;
int ret;
int shmid;
shmid = init_shm();
Socket socket;
cout<<arg<<endl;
cout<<arg<<endl;
char buf[32] = {0};
int sockfd = socket.GetSockfd();
Player *play = Player::GetPlayer(path); //创建播放器对象
while(1){
socket.Accept();
while(1){
int fd = socket.GetFd();
ret = recv(fd,buf,sizeof(buf),0);
cout<<buf<<endl;
if(-1 == ret){
perror("recv");
exit(1);
}
int i = atoi(buf);
char buf2[60] ;
strcpy(buf2,"helloworld");
socket.SendInfo(buf);
system("clear");
my_show_menu();
cout << "你的选择:";
cout<<i<<endl;
switch(i){
case 1:play->StartMusic(path);break;
case 2:play->PauseMusic(shmid);break;
case 3:play->QuitMusic(shmid);break;
case 4:play->NextMusic(shmid,path);break;
case 5:play->UpMusic(shmid,path); break;
case 6:play->RandPlay();cout<<"现在播放模式为随机播放"<<endl;break;
case 7:play->RepeatPlay();cout<<"现在播放模式为单曲循环"<<endl;break;
case 8:play->SequencePlay();cout<<"现在播放模式为顺序播放"<<endl;break;
case 9:play->SetSoundup();break;
case 10:play->SetSounddown();break;
case 11:play->HistoryPlay();break;
default:break;
}
if(i == 0){
close(fd);
cout<<"see you"<<endl;
break;
}
cout<<buf4<<endl;
ret = send(fd,&buf4,sizeof(buf4),0);
memset(buf,0,sizeof(buf));
}
}
close(sockfd);
}
接下来是程序实际运行情况展示:
其余功能也就不一一展示了