软件学院设计性实验报告
专业:年级: 班级:
一、实验目的
1.了解文件从服务器端到客户端的传输过程。
2.接触学科前沿流媒体技术;
3.掌握网络编程中TCP与UDP、以及B/S与C/S模式的异同点。
4.掌握精通一门网络编程语言。
二、总体设计
设计原理:
编写客户端和服务器端,实现文件从客户端读取服务器的文件,文件可包括图片,音乐,视频。实现在客户端播放服务器端的文件内容。该实验的源代码是借用网上一个传图片的例子修改而得。
设计方案和流程
(1)对在网上找到的进行研读和修改
(2)扩展程序的功能,使程序可以传送视频。
(3)运行程序,并调试错误
三、代码实验步骤
(1)对在网上找的程序进行修改,客户端服务器代码如下,核心代码已标出
服务器代码
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define HELLO_WORLD_SERVER_PORT 6666
#define LENGTH_OF_LISTEN_QUEUE 20
#define BUFFER_SIZE 1024
#define FILE_NAME_MAX_SIZE 512
int main(int argc,char **argv){
struct sockaddr_in server_addr;
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr=htons(INADDR_ANY);
server_addr.sin_port=htons(HELLO_WORLD_SERVER_PORT);
int server_socket=socket(AF_INET,SOCK_STREAM,0);
if(server_socket<0){
printf("socket failed.\n");
exit(1);
}
if(bind(server_socket,(struct sockaddr*)&server_addr,sizeof(server_addr))==-1){
printf("bind failed.\n");
exit(1);
}
if(listen(server_socket,LENGTH_OF_LISTEN_QUEUE)==-1){
printf("listen failed.\n");
exit(1);
}
while(1){
struct sockaddr_in client_addr;
socklen_t length=sizeof(client_addr);
int new_server_socket=accept(server_socket,(struct sockaddr*)&client_addr,&length);
if(new_server_socket<0){
printf("accept failed.\n");
break;
}
char buffer[BUFFER_SIZE];
bzero(buffer,BUFFER_SIZE);
length=recv(new_server_socket,buffer,BUFFER_SIZE,0);
if(length<0){
printff("recv failed.\n");
break;
}
char file_name[FILE_NAME_MAX_SIZE+1];
bzero(file_name,FILE_NAME_MAX_SIZE+1);
strncpy(file_name,buffer,strlen(buffer)>FILE_NAME_MAX_SIZE?FILE_NAME_MAX_SIZE:strlen(buffer));
FILE *fp=fopen(file_name,"r");
if(NULL==fp){
printf("file not found");
}
else{
bzero(buffer,BUFFER_SIZE);
int file_block_length=0;
while((file_block_length=fread(buffer,sizeof(char),BUFFER_SIZE,fp))>0){
printf("111111");
if(send(new_server_socket,buffer,file_block_length,0)<0){
printf("send failed.\n");
break;
}
bzero(buffer,BUFFER_SIZE);
}
fclose(fp);
printf("recv successs.\n");
}
close(new_server_socket);
}
close(server_socket);
return 0;
}
服务器端代码:
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define HELLO_WORLD_SERVER_PORT 6666
#define BUFFER_SIZE 1024
#define FILE_NAME_MAX_SIZE 512
int main(int argc,char **argv){
if(argc!=2){
printf("Usage:%s ip address",argv[0]);
exit(1);
}
struct sockaddr_in client_addr;
bzero(&client_addr,sizeof(client_addr));
client_addr.sin_family=AF_INET;
client_addr.sin_addr.s_addr=htons(INADDR_ANY);
client_addr.sin_port=htons(0);
int client_socket=socket(AF_INET,SOCK_STREAM,0);
if(client_socket<0){
printf("socket failed.\n");
exit(1);
}
struct sockaddr_in server_addr;
int connectfd;
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family=AF_INET;
if(inet_aton(argv[1],&server_addr.sin_addr)==0){
printf("server ip error.\n");
exit(1);
}
server_addr.sin_port=htons(HELLO_WORLD_SERVER_PORT);
if((connectfd=connect(client_socket,(struct sockaddr*)&server_addr,sizeof(server_addr)))==-1){
printf("can not connect.\n");
exit(1);
}
char file_name[FILE_NAME_MAX_SIZE+1];
bzero(file_name,FILE_NAME_MAX_SIZE+1);
printf("please input your file routine and name:");
scanf("%s",file_name);
char buffer[BUFFER_SIZE];
bzero(buffer,BUFFER_SIZE);
strncpy(buffer,file_name,strlen(file_name)>BUFFER_SIZE?BUFFER_SIZE:strlen(file_name));
send(client_socket,buffer,BUFFER_SIZE,0);
FILE *fp=fopen("receive.jpg","w");
if(NULL==fp){
printf("file can not write.\n");
exit(1);
}
bzero(buffer,BUFFER_SIZE);
int length=0;
while(length=recv(client_socket,buffer,BUFFER_SIZE,0)){
if(length<0){
printf("recv failed.\n");
break;
}
int write_length=fwrite(buffer,sizeof(char),length,fp);
if(write_length<length){
printf("file write failed.\n");
break;
}
bzero(buffer,BUFFER_SIZE);
}
printf("receive success");
close(fp);
close(client_socket);
return 0;
}
(2)在linux下对程序进行编译和运行,首先对服务器编译和运行
对客户端进行编译运行
(3)按照提示的操作输入文件的路径和名字,以传输图片为例子,传输音乐和视频类似,截图如下:
(4)传输视频的时候要安装视频播放器,把视频播放器的安装压缩文件拷贝上去,并在终端安装代码如下:
tar xzvf MPlayer-1.0rc4.tar.gz
tar xjvf all-20110131.tar.bz2
tar xjvf iTunes-1.1.tar.bz2
mv all-20110131/ /usr/local/lib/codecs
chmod -R 744 /usr/local/lib/codecs/*
chown root:root /usr/local/lib/codecs/*
cd MPlayer-1.0rc4
./configure --codecsdir=/usr/local/lib/codecs --enable-gui --enable-largefiles --enable-menu --enable-freetype
make&&make install
cd ~
mv iTunes/ /usr/local/share/mplayer/skins/
ln -s /usr/local/share/mplayer/skins/iTunes/ /usr/local/share/mplayer/skins/default
(5)传输视频,过程如(3)所示,最后可在客户端电脑上传输过来图片,音乐,视频如下:
图片为
视频打开为:
四、结果分析与总结
在网上搜索的过程搜到了很多程序,通过筛选比较选择了这个,在修改的过程中遇到了很多问题,都在和另一个组员的商量下得以解决,因为linux系统中没有解码器无法播放视频,便自学了安装解码器并且播放成功视频,同时感觉到了Linux语言的强大,对其有了改观,打下一个基础,也感谢老师在教学之中对我们的教育以及指导。
教师签名:
年 月 日
洛阳理工学院实验报告
1 / 10
2 / 10
3 / 10
4 / 10
5 / 10
6 / 10
7 / 10
8 / 10
9 / 10
10 / 10
流媒体技术基础实验大纲流媒体技术基础是教育技术专业和广播电视新闻专业的选修课程流媒体技术是计算机网络技术和多媒体技术的综合应用于教…
北京联合大学实验实习实训报告课程项目名称流媒体技术学院师范学院专业电子信息工程班级09电2学号20xx020xx5223姓名刘猛成…
软件学院设计性实验报告一实验目的1了解文件从服务器端到客户端的传输过程2接触学科前沿流媒体技术3掌握网络编程中TCP与UDP以及B…
1实验报告要求以下面格式进行命名日期下划线学号名字如20xx110320xx1122334张三其中20xx1103为上课的日期20…
北京联合大学实验实习实训报告课程项目名称流媒体技术学院师范学院专业电子信息工程班级09电2学号20xx020xx5223姓名刘猛成…
流媒体技术基础实验大纲流媒体技术基础是教育技术专业和广播电视新闻专业的选修课程流媒体技术是计算机网络技术和多媒体技术的综合应用于教…
1实验报告要求以下面格式进行命名日期下划线学号名字如20xx110320xx1122334张三其中20xx1103为上课的日期20…
实验二流媒体服务器的安装和配置一实验目的123了解网络流媒体系统的基本构成掌握网络流媒体服务器的软件安装和配置掌握网络流媒体网站的…