14电信 linux课程期末 上机测试
具体要求:
1).目的是测试系统分析、设计和嵌入式系统开发能能力,每组任选1题目;
2)网关外2人一组,每组独立完成报告中个人写自己完成的部分,即同一组没人的报告中完成的内容不同,总体结构和技术方案部分可以相同;
3)每一题目系统的结构和功能每组自主确定,考核是根据系统设计思路,难度和工作量综合评定,未完成最基本工作或者抄袭不计成绩;
4)视频和音乐播放可以有本地模式和网络模式,选一种即可,,每组中支持的格式尽可能不同,每一组中支持1-2种即可,具体功能自主确定;
5)网关中,除开关类字符模式外,要有流式信息如人脸图像等。可以4人一组,一组完成网关服务其部分,一组用开发板接zigbee或Wifi完成信息的输入和控制.;
6)完成时间:下学期开学3周内交报告和演示,过期不及成绩,本门课程不及格;
7)用C语言完成。
题目:
2.在开发板上实现一个音频服务端,支持常见的格式,可以是本地或网络模式,要有嵌入式系统的特点,具体功能和结构自主确定;
设计:
代码:
服务端:
/**************************************
*FILE :T:\musicServer\linux\tcp-s.c
*AUTHOR :707wk
*ORGANIZATION :GT-Soft Studio
*LAST-MODIFIED :2017/2/4 14:12:26
*TARGET :C/C++
*EMAIL :gtsoft_wk@foxmail.com
*LOGO :
#########
############
#############
## ###########
### ###### #####
### ####### ####
### ########## ####
#### ########### ####
##### ########### #####
###### ### ######## #####
##### ### ######## ######
###### ### ########### ######
###### #### ############## ######
####### ##################### #######
####### ##############################
####### ###### ################# #######
####### ###### ###### ######### ######
####### ## ###### ###### ######
####### ###### ##### #####
###### ##### ##### ####
##### #### ##### ###
##### ### ### #
## #### ####
***************************************/
//arm-linux-gcc -o tcp-s -lpthread tcp-s.c
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <arpa/inet.h>
#include <pthread.h>
#include <sys/stat.h>
#include <iconv.h>
#include <dirent.h>
#include <fcntl.h>
#include <signal.h>
#define SERVPORT 8580 //端口号
#define BACKLOG 128 //并发连接数
#define MAX_MESG_LEN 1024 //信息长度
#define MAX_MP3_NUMS 1000 //最大文件数
//#define PTHREADTEST //多线程模式
#define RUNONWINDOWS //客户端是gb2312编码
struct mp3info
{
//0 空 1存在
int state;
//文件名
char filesname[50];
//作者
char author[50];
//专辑
char special[50];
//时长
char duration[50];
}musiclist[MAX_MP3_NUMS];//存储音乐信息列表
int musicnums=0; //存储音乐数
int sumclient=0; //每秒连接客户端数
double runtimes=0; //运行时长
int listnums=0; //请求次数
int getnums=0; //请求次数
int putnums=0; //请求次数
int delnums=0; //请求次数
//日志函数
void logprintf(char* str)
{
struct timeval tv;
struct tm* ptm;
char time_str[128];
FILE* fplog=fopen("log.txt","a");
gettimeofday(&tv, NULL);
ptm = localtime(&tv.tv_sec);
strftime(time_str, sizeof(time_str), "%Y-%m-%d %H:%M:%S", ptm);
fprintf(fplog,"[%s]:%s\n",time_str,str);
fclose(fplog);
}
//保存文件信息
void savelist()
{
int i=0;
FILE* fpsave=fopen("data.list","w");
for(i=0;i<MAX_MP3_NUMS;i++)
{
if(musiclist[i].state==1)
{
fprintf(fpsave,"'%s' '%s' '%s' '%s'\n",
musiclist[i].filesname,
musiclist[i].author,
musiclist[i].special,
musiclist[i].duration);
}
}
fclose(fpsave);
}
#ifdef RUNONWINDOWS
//编码转换
int code_convert(char *from_charset,char *to_charset,char *inbuf,int inlen,char *outbuf,int outlen)
{
iconv_t cd;
int rc;
char **pin = &inbuf;
char **pout = &outbuf;
cd = iconv_open(to_charset,from_charset);
if (cd==0)
return -1;
memset(outbuf,0,outlen);
if (iconv(cd,pin,&inlen,pout,&outlen) == -1)
return -1;
iconv_close(cd);
return 0;
}
//utf-8 to gb2312
int u2g(char *inbuf,int inlen,char *outbuf,int outlen)
{
return code_convert("utf-8","gb2312",inbuf,inlen,outbuf,outlen);
}
//gb2312 to utf-8
int g2u(char *inbuf,size_t inlen,char *outbuf,size_t outlen)
{
return code_convert("gb2312","utf-8",inbuf,inlen,outbuf,outlen);
}
#endif
//获取文件大小
double get_file_size(const char *path)
{
double filesize = -1;
struct stat statbuff;
if(stat(path, &statbuff) < 0){
return filesize;
}else{
filesize = statbuff.st_size;
}
return filesize;
}
//获取音乐列表
int commandlist(int client_fd)
{
char tmpstr[MAX_MESG_LEN]="";
char client_mesg[MAX_MESG_LEN]="";
int i;
sprintf(tmpstr,"%d\n",musicnums);
if (send(client_fd, tmpstr, strlen(tmpstr)+1, 0) == -1)
{
//printf("send error!\n");
//close(client_fd);
return