流媒体:客户端与服务器之间的连接实验报告

软件学院设计性实验报告

专业:年级:  班级:

一、实验目的

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

实验七简单的服务器客户端程序实验报告

相关推荐