socket实现文件上传下载-嵌入式期末报告.doc

上传人:灯火****19 文档编号:135076524 上传时间:2020-06-11 格式:DOC 页数:24 大小:393.50KB
返回 下载 相关 举报
socket实现文件上传下载-嵌入式期末报告.doc_第1页
第1页 / 共24页
socket实现文件上传下载-嵌入式期末报告.doc_第2页
第2页 / 共24页
socket实现文件上传下载-嵌入式期末报告.doc_第3页
第3页 / 共24页
socket实现文件上传下载-嵌入式期末报告.doc_第4页
第4页 / 共24页
socket实现文件上传下载-嵌入式期末报告.doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《socket实现文件上传下载-嵌入式期末报告.doc》由会员分享,可在线阅读,更多相关《socket实现文件上传下载-嵌入式期末报告.doc(24页珍藏版)》请在金锄头文库上搜索。

1、第一部分:移植类1一、实验目的;1二、实验内容1三、实验环境1四、实验步骤2五、实验结果与讨论3第二部分:代码类3一、实验目的3二、实验内容与要求4三、主要仪器设备4四、实验内容44.1、实验基本功能44.2主要代码编写:44.2.1、实现服务器功能的主要代码编写54.2.2、实现客户端功能的主要代码编写14五、实验内容运行结果:215.1客户端和服务端均在虚拟机linux下运行215.2 虚拟机linux运行服务端,开发板运行客户端22六、实验结果与讨论24第一部分:移植类一、实验目的;利用虚拟机,在redhat linux下编译一个能在开发板上成功运行的应用软件二、实验内容在嵌入式Linu

2、x中移植一个能播放U盘上的mp3音频文件的应用程序MadPlay。三、实验环境Win7、虚拟机中的redhat linux四、实验步骤首先通过ftp把四个所需安装包拷贝到虚拟机的linux中,然后依次进行如下操作:1、创建工作目录:2、创建如下子目录以存放不同的源文件目录说明: tarball 目录用来存放所有的源代码包 src-x86 目录用来存放X86 版本的所有源代码文件 src-arm 目录用来存放ARM 版本的所有源代码文件 target-x86 目录是X86 版本的安装目录 target-arm 目录是ARM 版本的安装目录设置环境变量:将相关安装包拷贝到工作目录中:3、编译安装z

3、lib-1.2.3.tar.zip 配置4、然后make-make install即可5、编译安装libid3tag-0.15.1b(注:截图中的第一行代码后面部分为:-I$TARGET_DIR/include)6、然后make-make install即可7、编译安装libmad-0.15.1b 配置8、然后make-make install即可9、编译安装madplay-0.15.2b 配置10、然后make-make install即可Make install 完成后,会在target-arm/bin目录生成在arm开发板上可以运行的二进制文件madplay,拷贝到user-ftp目录下

4、;打开超级终端,连接到开发板上,在超级终端上通过ftp连接到虚拟机,然后使用get命令获取madplay和mp3文件,退出ftp,运行“./madplay music.mp3”即可播放视频。五、实验结果与讨论成功播发音频文件music.mp3,并演示给老师看,但在实验结束后忘记截取了相关图像,因此结果的图像未展现。第二部分:代码类一、实验目的按照教学计划,本课程要求初步掌握嵌入式基本知识,懂得在开发板使用wince和linux基本操作,本实验是利用socket是的开发板与主机通信。二、实验内容与要求Wince/Linux平台与windows主机间使用以太网实现通信,要求在linux/wince

5、/windows上编写一个TCP socket数据包收发程序,实现数据的通信,如实现文件发送。(也可以是2个开发板间的网络通信)三、主要仪器设备1、已连接网络的计算机。2、安装red hat9的虚拟机。3、装有linux的开发板四、实验内容4.1、实验基本功能在linux下用C语言编写,实现如下功能:服务器端客户端数据的上传、下载 4.2主要代码编写:Linux系统下,用文本编辑器编写ftp客户端与服务器端的C语言代码,另外几个包含的头文件。下面是在ftp客户端和服务器功能实现中比较重要的代码。4.2.1、实现服务器功能的主要代码编写 Main主函数定义一些相关的变量等代码:int main(

6、int argc,char* argv) int sockfd; int clientfd; uint16_t port; int ret; pid_t pid; struct sockaddr_in server_addr; if ( 2 != argc ) printf(usage: command listen_portn); return -1; port = atoi(argv1); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = INADDR_ANY; server_addr.sin_port = ht

7、ons(port); sockfd = socket(PF_INET,SOCK_STREAM,0); if (sockfd 0) perror(open data stream socket failed!n); return -1; ret = bind(sockfd,(struct sockaddr *)&server_addr,sizeof(server_addr); if(ret 0) perror(bind data socket failed!n); return -1; ret = listen(sockfd, SOMAXCONN ); if( ret 0) perror(lis

8、tening data stream failed!n); return -1; printf(正在等待客户端到链接.n); while(1) clientfd = accept(sockfd, NULL, NULL); if( clientfd 0) perror(accept data connection error!n); return -1; pid = fork(); if ( pid 0 ) perror(fork error!n); if ( 0 = pid ) /chid process printf(one client come .n); serv_client(clie

9、ntfd); return 0; close(clientfd); 处理服务器的请求int handle_request( msg_head_ctrl_t * msg, int sockfd);void serv_client(int sockfd) msg_head_ctrl_t *msg; ssize_t size; uint32_t body_len; uint32_t total_len; int ret; fd_set fs_client; struct timeval timeout;等待服务器请求 while(1) FD_ZERO(&fs_client); FD_SET( soc

10、kfd, &fs_client); timeout.tv_sec = DEFAULT_TIME_OUT; timeout.tv_usec = 0; ret = select(sockfd+1, &fs_client, NULL, NULL, &timeout); if ( 0 = ret ) /time out printf(time out.n); return ; if ( -1 = ret ) continue; 接收服务器的请求信息 size = recv( sockfd, &body_len, sizeof(uint32_t), MSG_PEEK); if ( sizebody_le

11、n = ntohl(msg-body_len); msg-command = ntohl(msg-command);/ printf(len = %d, msg = %sn, msg-body_len, msg-msg_body);如果服务器出现quit 的时候就推出 if ( COMMAND_QUIT = msg-command ) printf(client closed connection!n); close(sockfd); return ; 处理下载请求 ret = handle_request(msg, sockfd); if ( SOCK_ERROR = ret ) return;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 总结/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号