GESC通讯中心管理嵌入式软件说明书_第1页
GESC通讯中心管理嵌入式软件说明书_第2页
GESC通讯中心管理嵌入式软件说明书_第3页
GESC通讯中心管理嵌入式软件说明书_第4页
GESC通讯中心管理嵌入式软件说明书_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、GESC通讯中心管理嵌入式软件说明书 摘要嵌入式项目T-CAR 智能小车是嵌入式技术和物联网技术结合的产物。TCAR以三星高端微处理器为主控实现主要控制工作,将WIFI 无线通信与ZIGBEE 近距离无线组网通信相结合实现近距离和远程无线控制、信息采集等功能。T-CAR 即可作为互联网终端、物联网网关,也可以和工业控制、智能家居等系统融合使用。本课题目的是在ARM-Linux嵌入式环境下实现网络功能,系统主要由硬件层、内核层、应用层三部分构成。由于Linux具有可移植度高、自由、免费等特性,最近几年,它在移动设备和个人电脑领域的应用也越来越广泛,因此我们选择Linux操作系统,鉴于以上应用领域

2、对用户界面友好性方面的要求,几乎所有的此类应用都是采用图形用户界面。播放界面采用Qt设计,Qt是创造图形用户界面的最流行的跨平台GUI工具箱之一。这里将通过一个使用Qt技术的简单mp3播放器的实现,详细描述Linux环境下的图形界面编程技术。本实训课程是嵌入式应用开发方向的实训课程,主要介绍嵌入式应用程序的开发技术,课程内容涉及C 语法及核心库、嵌入式Linux 开发环境、嵌入式Linux应用开发流程。在内容组织上,以案例贯穿课程的始终。通过一系列案例的学习使学员能基本掌握嵌入式Linux 应用程序开发的基本技术,能开发出有图形界面,可交互,具有一定业务逻辑的嵌入式Linux 应用程序。关键字

3、:嵌入式;QT;mp3播放器;目录前言1第一章概述21.1课程设计目的21.2课程背景与要求21.2.1课程设计背景21.2.2课程设计要求31.3课程设计环境3第二章设计方案42.1设计功能42.2 设计思路4第三章 软件设计53.1模块流程图53.2 Madplay 移植63.3程序清单63.3.1音乐播放器服务器程序实现63.3.2音乐播放器客户端程序实现19第四章 调试过程244.1硬件连接244.2软件连接244.2.1 操作系统244.2.2 系统软件244.2.3 工具软件244.2.4 文档和资源254.3实验步骤254.4 出现的问题和解决方法254.5运行结果截屏26第五章

4、 总结28参考文献29前言随着社会的日益信息化,计算机和网络已经全面渗透到日常生活的每一个角落。对于我们每个人来说,需要的已经不再仅仅是那种放在桌上处理文档、进行工作管理和生产控制的计算机机器。任何一个普通人都可能拥有从小到大的各种使用嵌入式技术的电子产品,小到MP3、PDA等微型数字化产品,大到网络家电、智能家电、车载电子设备等。目前,各种各样的新型嵌入式系统设备在应用数量上已经远远超过了通用计算机。在工业和服务领域中,使用嵌入式技术的数字机床、智能工具、工业机器人、服务机器人正在逐渐改变着传统的工业生产和服务方式。MP3是嵌入式的最主要应用之一,高端的MP3已经不仅仅着眼于实现音乐播放这一

5、简单功能,而是同时具备了文本浏览、图片浏览、甚至视频播放等强大功能。本文重点讨论了基于WIFI 智能车的控制系统为主其中MP3的功能的实现,包括开发环境建立、内核配置与编译、Qt开发等一系列详细过程。近几年,嵌入式系统技术得到了广泛的应用,普适计算、无线传感器网络、可重构计算等新兴技术的出现又为嵌入式系统技术的研究与应用注入了新的活力。智能手机、信息家电、汽车电子、家用机器人嵌入式系统已“无处不在”。嵌入式系统是当今最热门的概念之一。作为一个系统,往往是在硬件和软件双螺旋式交替发展的支撑下逐渐趋于稳定和成熟,嵌入式系统也不例外。第一章 概述嵌入式项目T-CAR 智能小车是嵌入式技术和物联网技术

6、结合的产物。TCAR以三星高端微处理器为主控实现主要控制工作,将WIFI 无线通信与ZIGBEE 近距离无线组网通信相结合实现近距离和远程无线控制、信息采集等功能。T-CAR 即可作为互联网终端、物联网网关,也可以和工业控制、智能家居等系统融合使用。1.1课程设计目的嵌入式系统设计与实践课程设计介绍基本设计与实现方法,是为计算机科学与技术专业本科生开设的一门重要的专业课程。是对以前所学很多知识的汇总和深化。通过三周的设计,能把以前很多所学的理论联系实际,培养学生的实验动手能力和创新意识,使学生对嵌入式系统有更全面的认识,掌握嵌入式系统的设计与开发的方法,为将来进行嵌入式应用系统的设计与开发奠定

7、基础。1.2课程背景与要求1.2.1课程设计背景物联网是一个基于互联网、 传统电信网等信息承载体, 让所有能够被独立寻址的普通物理对象实现互联互通的网络。物联网通过智能感知、识别技术与普适计算、泛在网络的融合应用,被称为继计算机、互联网之后世界信息产业发展的第三次浪潮。物联网被视为互联网的应用拓展,应用创新是物联网发展的核心,以用户体验为核心的创新 2.0 是物联网发展的灵魂。随着物联网的发展,越来越多的物联网控制终端将涌现,对于相关技术的学习需求和基于该领域的就业机会将大增,本智能车就是在此前提下诞生的。该智能车具有很强的操控性、可玩性,同时融入嵌入式物联网相关技术,使学员可在相对轻松愉悦的

8、环境中学习各种技术,让嵌入式技术的学习变得不在枯燥。本车设计之初既考虑了可产品化空间,也考虑了技术知识点的涵盖,使学习更能明确目标;同时本项目在选材上也考虑了项目的手工打造的可能性,意在锻炼学员的动手实践能力,只要学习者有兴趣,即可按所提供的材料清单和学习的相关技术自行打造,我们更希望能培养学习者的创客精神和创业欲望与意识。1.2.2课程设计要求要求采用C/S架构,完成对网络音乐播放器软件的分析、设计、编码、测试等工作。音乐播放器功能说明:服务器实现完整的音乐播放器功能,客户端通过网络实现控制操作。包括如下:1、Madplay音乐播放器移植。2、音乐播放器服务器设计,通过网络接收客户端请求并执

9、行对应动作,实现音乐播放、暂停、上一首、下一首、播放列表、停止等功能;3、QT客户端界面设计,要求利用qt设计控制客户端界面,实现通过网络向服务器发送命令请求等功能。1.3课程设计环境环境要求:操作系统:windows 7+ubuntu虚拟系统 平台:vim编辑器,GNU工具链,Qtcreator集成开发环境开发语言:C/C+文档环境:windows office第二章 设计方案2.1设计功能音乐播放器功能说明:服务器实现完整的音乐播放器功能,客户端通过网络实现控制操作。包括如下:1、Madplay音乐播放器移植;2、音乐播放器服务器设计,通过网络接收客户端请求并执行对应动作,实现音乐播放、暂

10、停、上一首、下一首、播放列表、停止等功能;3、QT客户端界面设计,要求利用qt设计控制客户端界面,实现通过网络向服务器发送命令请求等功能。2.2 设计思路1、开发环境搭建,虚拟机配置相关vim编辑器,gcc编译器等相关软件配置。2、madplay音乐播放器移植,包括libmad音频解码库的使用,所以首先需要移植madplay,具体方法如下:1)创建安装库的路径 sudo mkdir /opt/arm/madplay/lib2)进入madplay 源码目录 执行./build3 ) 测试将madplay 和库文件复制到根文件系统, 配置LD_LIBRARY_PATH,执行madplay xxx.

11、mp3。3、服务器端程序设计,采用C语言在Linux环境在完成音乐播放器功能。4、利用Qtcreator设计客户端界面,实现向服务器发送控制命令等功能第三章 软件设计3.1模块流程图播放Filename是否为空获取播放文件信息:播放歌曲、当前播放位置等。开始播放激活进度条TimeSlider显示时间长度、当前播放位置及文件名称是否停止播放是否暂停停止播放暂停播放图1.1模块流程图3.2 Madplay 移植1) 首先建立一个mp3 文件夹,进入到mp3 文件夹后再建立两个文件夹,一个存放源码,一个存放安装文件。在home 下,mkdir 两个文件夹:madplay-src、madplay。依次

12、解压四个源码包到madplay 目录下:tar zxvf XXX.tar.gz(2) 编译zlib-1.1.4进入zlib 源文件目录,依此执行./configure9 / 26make make install(3) 编译libid3tag进入tag 源码目录,依此执行./configure make make install(4) 编译libmad进入libmad 源码,依此执行./configuremake注:使用的是高版本的ARM-LINUX-GCC 如4.4.6 编译器,MAKE 时可能会出现”CCL:ERROR:UNRECOGNIZED COMMAND LINE OPTION “-

13、FFORCE-MEM”错误,这是因为这个高版本的GCC 没有”-FFORCEMEM”参数,解决的办法是在LIBMAD 文件中的MAKEFILE 里面查找”-FFORCE-MEM”,将其删除即可 make install(5) 编译madplay进入madplay 源码目录,依此执行./configure -with alsa make make install(6) 测试madplay执行命令(配置环境变量):export LD_LIBRARY_PATH=$LD_LIBRARY_PATH/usr/local/lib运行:madplay xx.mp33.3程序清单3.3.1音乐播放器服务器程序实

14、现1.player.c#include "common.h"#include "socket.h"#include "player.h"/*孙子进程id 号*/pid_t gradchild;/*子进程id 号*/pid_t pid;/*共享内存描述标记*/int shmid;char *p_addr;/*共享内存内容格式*/*|gradchild(孙子进程PID) |+ |空一个字节|+ currentsong(当前播放列表的节点指针)|*/*listhead for music*/struct song* head;/*创建歌曲名

15、的双向循环链表*/struct song *creat_song_list(void)FILE *fd;ssize_t size;size_t len;char *line = NULL;struct song *p1;struct song *p2;int res=system("ls ./song > song_list");if(res = -1) perror("system");fd = fopen("song_list","rb");if(fd=NULL)perror("fopen&qu

16、ot;);p1 = (struct song *)malloc(sizeof(struct song);printf("=songlist=n");res=system("ls ./song");if(res = -1) perror("system");printf("n");printf("=n");size = getline(&line,&len,fd);strncpy(p1->songname,line,strlen(line);head = p1;int n=s

17、trlen(line);(head->songname)n='0'while(size = getline(&line,&len,fd) != -1) /从文件中读取一行,直到出错或者到文件尾EOF 返回-1p2 = p1;p1 = (struct song *)malloc(sizeof(struct song);strncpy(p1->songname,line,strlen(line);p2->next = p1;p1->prev = p2;int n=strlen(line);(p1->songname)n='0&#

18、39;p1->next = head;head->prev = p1;p1 = NULL;p2 = NULL;res=system("rm -rf song_list");if(res = -1) perror("system");return head;/*MP3 音乐播放器->播放音乐函数*/void play(struct song *currentsong)pid_t newfd;char *c_addr;void *tempaddr;char *p;int len;char my_song2048="./song/&

19、quot;while(currentsong)printf("currentsong size=%dn",strlen(currentsong->songname);/*子进程创建孙子进程*/newfd = fork();if(newfd = -1)perror("fork");exit(1);else if(newfd = 0) /孙子进程printf("play fork success!n");/*把歌曲名加上根路径*/strcat(my_song,currentsong->songname);p = my_song

20、;len = strlen(p);/*去掉文件名最后的'0'*/my_songlen-1='0'printf("THIS SONG IS %s size=%dn",my_song,strlen(my_song);/*运行madplay 播放器,播放MP3*/execl("/usr/local/sbin/madplay","madplay",my_song,NULL);/播放当前列表MP3 音乐printf("nnn");else /子进程/*内存映射*/tempaddr = shma

21、t(shmid,0,0);c_addr = (char *)tempaddr;/*把孙子进程的id 和当前播放歌曲的节点指针传入共享内存*/memcpy(c_addr,&newfd,sizeof(pid_t);memcpy(c_addr + sizeof(pid_t)+1,&currentsong,4);/*使用wait 阻塞子进程,直到孙子进程播放完才能被唤醒;当被唤醒时,表示播放MP3 期间没有按键按下,则继续顺序播放下一首MP3*/if(newfd = wait(NULL)currentsong = currentsong->next;printf("TH

22、E NEXT SONG IS %sn",currentsong->songname);/*MP3 音乐播放器->调用play 函数播放音乐*/void startplay(pid_t *childpid,struct song *my_song)pid_t pid;/如果没有音乐正在播放并且不是处于暂停状态if(play_flag = 0) && (play_pause_flag != 1)play_flag = 1;play_stop_flag = 0;/*创建子进程*/pid = fork();if(pid > 0) /父进程*childpid

23、= pid; /子进程PID 初始化sleep(1);/*读取共享内存保存的pid,初始化孙子进程的pid*/*p_addr 指向共享内存,保存的是孙子进程的ID*/memcpy(&gradchild,p_addr,sizeof(pid_t);else if(0 = pid) /子进程/*子进程播放MP3 函数*/play(my_song);/如果没有音乐正在播放并处于暂停状态else if(play_flag = 0) && (play_pause_flag = 1)play_flag = 1;play_pause_flag = 0;conti_play(gradch

24、ild);elsereturn;/*MP3 音乐播放器->暂停播放*/void my_pause(pid_t pid)if(play_flag = 1) && (play_pause_flag = 0)printf("=PAUSE!PRESS PLAY TOCONTINUE=n");kill(pid,SIGSTOP); /对孙子进程发送SIGSTOP 信号play_pause_flag = 1;play_flag = 0;elsereturn;/*MP3 音乐播放器->继续播放*/void conti_play(pid_t pid)printf(

25、"=CONTINUE=n");kill(pid,SIGCONT); /对孙子进程发送SIGCONT 信号/*MP3 音乐播放器->播放下一首*/*只有正在播放音乐的状态下,上一首和下一首才有作用*/void next(pid_t next_pid)int res;if(play_flag = 0)return;elsestruct song *nextsong;printf("=NEXTMP3=n");/*从共享内存获得孙子进程播放歌曲的节点指针*/memcpy(&nextsong,p_addr + sizeof(pid_t)+1,4);/

26、*指向下首歌曲的节点*/nextsong = nextsong->next;/*杀死当前歌曲播放的子进程,孙子进程*/res = kill(pid,SIGKILL);if(res = -1)perror("kill next pid error");return;res = kill(next_pid,SIGKILL);if(res = -1)perror("kill next next_pid error");res=system("killall madplay");if(res = -1) perror("sys

27、tem");/wait(NULL);play_flag = 0;startplay(&pid,nextsong);/*MP3 音乐播放器->播放上一首*/void prev(pid_t prev_pid)int res;if(play_flag = 0)return;else struct song *prevsong;/*从共享内存获得孙子进程播放歌曲的节点指针*/printf("=PRIORMP3=n");memcpy(&prevsong,p_addr + sizeof(pid_t)+1,4);/*指向上首歌曲的节点*/prevsong

28、= prevsong->prev;/*杀死当前歌曲播放的子进程,孙子进程*/res = kill(pid,SIGKILL);if(res = -1)perror("kill prev pid error");return;res = kill(prev_pid,SIGKILL);if(res = -1)perror("kill prev prev_pid error");res=system("killall madplay");if(res = -1) perror("system");/wait(NULL

29、);play_flag = 0;startplay(&pid,prevsong);/*MP3 音乐播放器->停止播放*/void my_stop(pid_t g_pid)int res;if(play_stop_flag = 1)/如果已经停止,直接返回return;if(play_flag = 1) | (play_pause_flag = 1)printf("=STOP!PRESS PLAY TOSTART=n");res = kill(pid,SIGKILL); /对子进程发送SIGKILL 信号if(res = -1)perror("stop

30、 pid error");return;res = kill(g_pid,SIGKILL); /对孙子进程发送SIGKILL 信号if(res = -1)perror("stop g_pid error");res=system("killall madplay");if(res = -1) perror("system");play_flag = 0;play_stop_flag = 1;play_pause_flag = 0;elsereturn;/*MP3 音乐播放器->播放列表*/*搜索列表音乐名字与歌曲相匹配

31、,并杀死正在播放歌曲进程而播放对应列表音乐*/void playlist(pid_t childpid,char *listsong)int res;play_flag = 0;if(strncmp(head->songname,listsong,4) = 0)res = kill(pid,SIGKILL);if(res = -1)perror("playlist kill pid error");return;res = kill(childpid,SIGKILL);if(res = -1)perror("playlist kill childpid er

32、ror");res=system("killall madplay");if(res = -1) perror("system");wait(NULL);startplay(&pid,head);return ;struct song *nextsong=head->next;doif(strncmp(nextsong->songname,listsong,4)=0)res = kill(pid,SIGKILL);if(res = -1)perror("playlist kill pid error");

33、return;res = kill(childpid,SIGKILL);if(res = -1)perror("playlist kill childpid error");res=system("killall madplay");if(res = -1) perror("system");wait(NULL);startplay(&pid,nextsong);return;nextsong=nextsong->next;while(nextsong!=head);/*接收客户端命令*/void recvcmd(voi

34、d)int cmd=0;char bufSIZE;memset(buf,0,sizeof(buf);while(1)int len = recvfrom(server_sockfd,&cmd,4,0,(structsockaddr*)&server_addr,&sin_size);if(len<0)continue;switch (cmd)case PLAY:startplay(&pid,head);break;case PAUSE:my_pause(gradchild);break;case STOP:my_stop(gradchild);break;c

35、ase NEXT:next(gradchild);break;case PREV:prev(gradchild);break;case LISTSONG:memset(buf,0,sizeof(buf);len=recvfrom(server_sockfd,buf,sizeof(buf),0,(structsockaddr*)&client_addr,&sin_size);if(len>0)printf("recv listbuf = %sn",buf);playlist(gradchild,buf);break;default:puts("

36、not find the cmd!");break;int main()/*创建播放列表*/head=creat_song_list();/*共享内存:用于存放子进程ID,播放列表位置*/void *tempaddr;if(shmid = shmget(IPC_PRIVATE,5,PERM)= -1)perror("shmget");tempaddr = shmat(shmid,0,0);if(tempaddr = (void *)-1)perror("shmat");p_addr = (char *)tempaddr;memset(p_add

37、r,'0',1024);/*初始化MP3 播放停止标志*/play_flag=0;play_stop_flag=0;play_pause_flag=0;/初始化网络int res=create_socket();if(res<0)perror("create_socket");/接收控制命令(死循环);recvcmd();return 0;2.play.h#ifndef PLAYER_H#define PLAYER_H/*共享内存申请标记*/#define PERM S_IRUSR|S_IWUSR#define SIZE 1024struct song

38、char songname1024;struct song *prev;struct song *next;char *playsong;/*播放标记*/int play_flag;int play_stop_flag;int play_pause_flag;/*保存接收到的字符串(推送过来的消息)*/char temp_str100;unsigned int pos;extern void play(struct song *currentsong);extern struct song *creat_song_list(void);extern void startplay(pid_t *

39、childpid,struct song *my_song);extern void my_pause(pid_t pid);extern void my_stop(pid_t g_pid);extern void conti_play(pid_t pid);extern void next(pid_t next_pid);extern void prev(pid_t prev_pid);extern void playlist(pid_t childpid,char *listsong);#endif3.socket.c#include "socket.h"int ser

40、ver_sockfd;socklen_t sin_size;struct sockaddr_in server_addr;struct sockaddr_in client_addr;int create_socket()memset(&server_addr, 0, sizeof(server_addr);/* 初始化网络信息*/server_addr.sin_family = AF_INET; /设置为IP 通信server_addr.sin_addr.s_addr = INADDR_ANY; /无限制server_addr.sin_port = htons(8000);if (s

41、erver_sockfd = socket(PF_INET,SOCK_DGRAM,0) < 0) return -1;if(bind(server_sockfd, (struct sockaddr *)&server_addr,sizeof(struct sockaddr) < 0) return -1;return 1;sin_size = sizeof(struct sockaddr_in);4.socket.h#ifndef SOCKET_H#define SOCKET_H#include "common.h"#define PLAY 11#def

42、ine PAUSE 12#define STOP 13#define CONTINUE 14#define NEXT 15#define PREV 16#define LISTSONG 18extern int server_sockfd;extern socklen_t sin_size;extern struct sockaddr_in server_addr;extern struct sockaddr_in client_addr;extern int create_socket();#endifmon.h#ifndef _COMMON_H#define _COMMON_H#inclu

43、de <stdio.h>#include <stdlib.h>#include <string.h>#include <pthread.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>#include <string.h>#include <sys/time.h>#include <sys/types.h>#include <unistd.h>#include <linux/in

44、put.h>#include <termios.h>#include <signal.h>#include <sys/select.h>#include <errno.h>#include <sys/wait.h>#include <string.h>#include <sys/ipc.h>#include <sys/shm.h>#include <fcntl.h>#include <sys/ioctl.h>#include <sys/types.h>#in

45、clude <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <signal.h>#define ERROR -1#endif6.makefilename=*.cBIN=playerFLAGS=-g -O2 -Walldefault:gcc $(FLAGS) $(name) -o $(BIN)_3.3.2音乐播放器客户端程序实现1,player.cpp#include "player.h"#include "ui_player.h&

46、quot;#include "listmusic.h"#include "socket.h"player:player(QWidget *parent) :QDialog(parent),ui(new Ui:player)ui->setupUi(this);init_socket();player:player()delete ui;void player:on_play_clicked()int cmd = 0;int len;cmd = PLAY;len=sendto(client_sockfd, &cmd, 4,0, (struct

47、sockaddr *)&client_addr,sin_size);if (len < 0) QMessageBox:question(this, tr("结果"),QString(tr("发送网络数据失败");return;void player:on_pause_clicked()int cmd = PAUSE;int len=sendto(client_sockfd,&cmd,4,0,(struct sockaddr*)&client_addr,sin_size);if(len<0)QMessageBox:que

48、stion(this,tr("结"),QString(tr("发送网络数据失败");return ;void player:on_next_clicked()int cmd = NEXT;int len=sendto(client_sockfd, &cmd, 4,0, (struct sockaddr*)&client_addr, sin_size);if (len < 0) QMessageBox:question(this, tr("结"),QString(tr("发送网络数据失败");r

49、eturn;void player:on_prev_clicked()int cmd = PREV;int len=sendto(client_sockfd, &cmd, 4,0, (struct sockaddr*)&client_addr, sin_size);if (len < 0) QMessageBox:question(this, tr("结果"),QString(tr("发送网络数据失败");return;void player:on_listbutton_clicked()player xy3;listmusic l

50、;/l.setWindowFlags(Qt:FramelessWindowHint);l.setGeometry(850,250,250,350);/l.show();if(l.exec()=Accepted)xy3.show();void player:on_stop_clicked()int cmd = STOP;int len=sendto(client_sockfd, &cmd, 4,0, (struct sockaddr*)&client_addr, sin_size);if (len < 0) QMessageBox:question(this, tr(&qu

51、ot;结果"),QString(tr("发送网络数据失败");return;2.play.h#ifndef PLAYER_H#define PLAYER_H#include <QDialog>#include <QtDebug>#include <QTimer>#include <QMessageBox>#include <QFileDialog>#include <QTextCodec>#include <QDateTime>#include <QProgressDialo

52、g>#include "socket.h"namespace Ui class player;class player : public QDialogQ_OBJECTpublic:explicit player(QWidget *parent = 0);player();private slots:void on_play_clicked();void on_pause_clicked();void on_next_clicked();void on_prev_clicked();void on_listbutton_clicked();void on_stop_c

53、licked();private:Ui:player *ui;#endif / PLAYER_H3.socket.cpp#include "socket.h"/* 网络通信变量*/int client_sockfd;int len;int sin_size;struct sockaddr_in client_addr;void init_socket()/* 创建socket 跟设备进行通信*/client_addr.sin_family = AF_INET;client_addr.sin_addr.s_addr = inet_addr("127.0.0.1&qu

54、ot;); /服务器IP/client_addr.sin_addr.s_addr = inet_addr("192.168.1.6");client_addr.sin_port = htons(8000);if (client_sockfd = socket(PF_INET,SOCK_DGRAM,0) < 0) printf("socket errorn");exit(-1);sin_size = sizeof(struct sockaddr_in);#ifndef SOCKET_H#define SOCKET_H4.socket.h/* 网络数据

55、头文件*/#include <stdio.h>#include <sys/types.h> /* See NOTES */#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#include <sys/stat.h>#include <fcntl.h>#include <sys/time.h>#include <stdlib.h>#define PLAY

56、11#define PAUSE 12#define STOP 13#define CONTINUE 14#define NEXT 15#define PREV 16#define LISTSONG 18extern void init_socket();extern int client_sockfd;extern int len;extern int sin_size;extern struct sockaddr_in client_addr;#endif / SOCKET_H第四章 调试过程4.1硬件连接实训机器的硬件配置要求如下:硬件类型 主讲机器 学员机器CPU:(主讲机器)基本 In

57、tel Pentium® 系列2.0GHz 以上,推荐Intel Pentium® 系列双核;(学员机器)Intel Pentium® 系列1.6GHz 以上,推荐Intel Pentium® 系列2.0GHz 以上。内存:(主讲机器)基本 DDR3 系列内存2GB 容量 DDR3 系列内存2 容量,推荐 DDR3 系列内存4GB 容量 DDR3 系列内存4GB 容量硬盘;(学员机器)基本 不小于60GB 容量 不小于60GB 容量,推荐 120GB 以上容量 120GB 以上容量。4.2软件连接4.2.1 操作系统1.学生机器使用ubuntu 12.04 系列32 位操作系统 或windows+VMware

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论