在linux开发板上实现一个音频服务器

本文主要介绍了14电信Linux课程期末上机测试的要求,其中一项任务是使用C语言在开发板上实现一个音频服务端,支持常见格式,可选择本地或网络模式。设计需体现嵌入式系统特性,功能和结构由小组自主决定,并在下学期开学三周内提交报告和演示。
摘要由CSDN通过智能技术生成

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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值