嵌入式系统及应用综合实验报告格式.docx

上传人:b****1 文档编号:2420785 上传时间:2022-10-29 格式:DOCX 页数:20 大小:282.71KB
下载 相关 举报
嵌入式系统及应用综合实验报告格式.docx_第1页
第1页 / 共20页
嵌入式系统及应用综合实验报告格式.docx_第2页
第2页 / 共20页
嵌入式系统及应用综合实验报告格式.docx_第3页
第3页 / 共20页
嵌入式系统及应用综合实验报告格式.docx_第4页
第4页 / 共20页
嵌入式系统及应用综合实验报告格式.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

嵌入式系统及应用综合实验报告格式.docx

《嵌入式系统及应用综合实验报告格式.docx》由会员分享,可在线阅读,更多相关《嵌入式系统及应用综合实验报告格式.docx(20页珍藏版)》请在冰豆网上搜索。

嵌入式系统及应用综合实验报告格式.docx

嵌入式系统及应用综合实验报告格式

安徽工业大学

电气信息学院

嵌入式系统及应用综合实验报告

Linux系统下TFTP和QT下聊天程序设计

 

姓名:

刘洪方

学号:

109104069

专业:

工商管理

年级:

1

指导教师:

马小陆

2011年6月30日

一、课程设计项目介绍(含项目介绍及设计目的)

(四号宋体,页数不够可另加,排版要工整规范,如每个大标题应位于页首等等,以下类同)

1.项目介绍:

TFTP:

是一个服务器客户端网络程序,以提供简单文件共享服务器,支持下载,列出文件目录和上传文件功能。

QT:

是一个简单的服务器客户端聊天程序,以提供简单的数据通信。

2、设计目的:

TFTP:

是为提供一个可以为网络使用者提供文件共享简单的功能的使用。

方便网络间文件的访问和使用。

QT:

是一个支持双方简单聊天功能的程序。

两者都帮助我们锻炼理念知识和实践能力。

二、总体设计(含系统的总体结构、原理框图或各模块介绍等)

三、详细设计(含主要的数据结构、程序流程图、关键代码段及注释等)

(四号宋体,框图文字用小五宋体)

以下是各代码的解释,介绍,原理,流程图:

 

TFTP服务器:

#include

#include

#include

#include

#include

#include

#include/*SeeNOTES*/

#include

#include

#include

#include

#defineN128

typedefstructsockaddrSA;

ProcessList过程:

利用一个循环获得目录中所有的文件,并把文件名发送到客户端,最终把所有文件表发送到客户端。

完成此列出文件目录功能

voidProcessList(intconnfd)

{

charbuf[N];

DIR*mydir;

structdirent*myitem;

mydir=opendir(".");

while((myitem=readdir(mydir))!

=NULL)

{

if((strcmp(myitem->d_name,".")==0)||(strcmp(myitem->d_name,"..")==0))continue;

strcpy(buf,myitem->d_name);

send(connfd,buf,N,0);

}

closedir(mydir);

return;

}

ProcessGet过程:

首先打开需要下载的客户端发来命令中的文件名文件,然后如果打开成功则向客户端发送Y,客户端准备接收,然后服务器以128为单位读取数据,发送数据,最终把一个文件所有内容发送给客户端。

完成下载功能。

voidProcessGet(intconnfd,charbuf[])

{

intfd,nbyte;

if((fd=open(buf+1,O_RDONLY))<0)

{

fprintf(stderr,"failtoopen%s:

%s\n",buf+1,strerror(errno));

buf[0]='N';

send(connfd,buf,N,0);

return;

}

buf[0]='Y';

send(connfd,buf,N,0);

while((nbyte=read(fd,buf,N))>0)

{

send(connfd,buf,nbyte,0);

}

close(fd);

return;

}

ProcessPut过程:

首先创建客户端发来命令中的文件名文件,然后如果打开成功则向客户端发送Y,客户端准备发送,客户端以128为单位读取数据,发送数据,每发送一段,服务器写入这部分内容,最终把一个文件所有内容发送给服务器。

完成上传功能。

voidProcessPut(intconnfd,charbuf[])

{

intfd,nbyte;

if((fd=open(buf+1,O_WRONLY|O_CREAT|O_TRUNC,0666))<0)

{

printf("failtocreate%sonserver\n",buf+1);

return;

}

while((nbyte=recv(connfd,buf,N,0))>0)

{

write(fd,buf,nbyte);

}

close(fd);

return;

}

Main过程:

首先初始化所有网络参数等待客户端的连接,然后以一个循环来接收客户端发来的命令首字符,并跟据这个来执行对应的操作。

intmain(intargc,char*argv[])

{

intlistenfd,connfd;

charbuf[N];

structsockaddr_inserver_addr;

//XXX:

step1intsocket(intdomain,inttype,intprotocol);

if((listenfd=socket(PF_INET,SOCK_STREAM,0))<0)

{

fprintf(stderr,"failtosocket:

%s\n",strerror(errno));

exit(-1);

}

#ifdef_DEBUG_

printf("socketis%d\n",listenfd);

#endif

//XXX:

step2intbind(intsockfd,conststructsockaddr*serv_addr,socklen_taddrlen);

memset(&server_addr,0,sizeof(server_addr));

server_addr.sin_family=PF_INET;

server_addr.sin_port=htons(8888);

server_addr.sin_addr.s_addr=htonl(INADDR_ANY);

if(bind(listenfd,(SA*)&server_addr,sizeof(server_addr))<0)

{

perror("failtobind");

exit(-1);

}

listen(listenfd,5);

while

(1)

{

if((connfd=accept(listenfd,NULL,NULL))<0)

{

perror("failtoaccept");

break;

}

recv(connfd,buf,N,0);

switch(buf[0])

{

case'L':

ProcessList(connfd);

break;

case'G':

ProcessGet(connfd,buf);

break;

case'P':

ProcessPut(connfd,buf);

break;

}

close(connfd);

}

return0;

}

TFTP客户端:

TFTP客户端:

#include

#include

#include

#include

#include

#include/*SeeNOTES*/

#include

#include

#include

#include

#defineN128

typedefstructsockaddrSA;

Printhelp过程:

打印所有的操作帮助。

voidPrintHelp()

{

printf("help:

displayhelpinfo\n");

printf("list:

getfilelistofserver\n");

printf("get:

get\n");

printf("put:

put\n");

printf("quit:

quittheclient\n");

return;

}

ProcessList过程:

首先利用配置好的网络参数连接服务器,然后向服务器发送“L”命令,最后利用一个循环接收目录中所有的文件名,并打印文件名,最终把所有文件表发送到客户端。

完成此列出文件目录功能

voidProcessList(structsockaddr_inserver_addr)

{

intsockfd,nbyte;

charbuf[N];

if((sockfd=socket(PF_INET,SOCK_STREAM,0))<0)

{

printf("failtolist\n");

return;

}

if(connect(sockfd,(SA*)&server_addr,sizeof(server_addr))<0)

{

printf("failtoconnectserver\n");

gotoERROR_1;

}

strcpy(buf,"L");

send(sockfd,buf,N,0);

while((nbyte=recv(sockfd,buf,N,0))!

=0)

{

printf("%s\n",buf);

}

ERROR_1:

close(sockfd);

return;

}

ProcessGet过程:

首先利用配置好的网络参数连接服务器,然后向服务器发送“G”命令并附上需要处理的文件名,创建需要下载的命令中的文件名文件,客户端准备接收,然后服务器以128为单位读取数据,写入数据,最终把一个文件所有内容接收到客户端。

完成下载功能。

voidProcessGet(structsockaddr_inserver_addr,charcommand[])

{

intsockfd,nbyte,fd;

charbuf[N];

if((sockfd=socket(PF_INET,SOCK_STREAM,0))<0)

{

printf("failtoget\n");

return;

}

if(connect(sockfd,(SA*)&server_addr,sizeof(server_addr))<0)

{

printf("

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 面试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1