计算机网络文件传输及管理系统课程设计报告Word格式文档下载.docx
- 文档编号:17763802
- 上传时间:2022-12-09
- 格式:DOCX
- 页数:25
- 大小:355.90KB
计算机网络文件传输及管理系统课程设计报告Word格式文档下载.docx
《计算机网络文件传输及管理系统课程设计报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《计算机网络文件传输及管理系统课程设计报告Word格式文档下载.docx(25页珍藏版)》请在冰豆网上搜索。
TCP提供的是一种可靠的数据流服务,采用一种称为“滑动窗口”的方式进行流量控制。
TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。
应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。
1.2.2、客户机/服务器模型
网络应用层程序一般都是以客户机/服务器模型的方式工作的,而因特网便是客户机/服务器模型的一个典型应用。
在这种工作方式中,一个服务器程序先启动,并在一个熟知端口侦听对服务器的请求,当客户机应用程序需要某种服务时,须向提供这种服务的服务器发出请求,服务器在接收到请求后,向客户机发出响应请求信息。
这样客户机用用程序和服务器程序之间变建立了连接,此后可以进行数据通信。
通信任务完成后需要关闭它们之间的通信连接。
图1客户机/服务器模型的工作流程
1.2.3、设计基本思路
设计程序使客户端连接的时候,服务器将会向客户端发回一条消息告知它的IP地址,然后关闭连接并继续接收端口的连接。
建立各个命令功能对应的函数,发送请求,等待服务器端的服务。
服务器端初始化WinSock,创建SOCKET,获取主机信息,并对客户端进行会话,发送回复讯息给客户端,响应完毕后关闭连接,释放WinSock。
模拟TCP/IP协议的工作模式,在双方工作的时候开设一个熟知端口(4523),进行数据的传送与接收。
模拟TCP工作机制,确定数据端口传送数据时,进行分组传送。
服务器从打开开始,保持监听控制端口,当用户登陆成功后,主动分配该用户服务线程。
在传送数据的时候,为了确保不影响原程序的工作,应独立分配线程。
本设计基本图如下:
第二章设计概要
功能设计
本项目是为了实现基于Socket进行文件传输的功能。
项目的分析及设计要求如下:
1)整个系统中分为服务器端(Server)和客户端(Client)
2)服务器端可以对文件进行管理,包括上传,下载,删除文件,重命名等
3)客服端可以实现文件的上传、下载以及查看服务器下默认目录的文件列表
4)在程序中应用多线程来实现多个客户端同时对一个服务器端进行请求操作
程序系统功能模块
图
功能分析
2.3.1功能流程图:
图面向连接的客户机/服务器程序工作模型
2.3.2程序主要功能说明
主要功能实现代码如下:
1.服务器端
;
}
ch=EOF;
send(conSock,&
ch,1,0);
printf("
\nTransmissionfinished"
);
}
intmain()
{
WSADATAwords;
if(WSAStartup(MAKEWORD(2,2),&
words)!
=0)
{
Winsockinitfailed!
\n"
}
SOCKETlistenSock,conSock;
sockaddr_inremoteAddr;
intremoteAddrLen,intServerAddrLen;
listenSock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(listenSock==INVALID_SOCKET)
ListenSocketcreatefailed!
return0;
sockaddr_insin;
=AF_INET;
=htons(LISTENPORT);
=INADDR_ANY;
ServerAddrLen=sizeof(sin);
if(bind(listenSock,(sockaddr*)&
sin,ServerAddrLen)==SOCKET_ERROR)
Binderror!
if(listen(listenSock,2)==SOCKET_ERROR)
Can'
tlisten!
remoteAddrLen=sizeof(remoteAddr);
while(TRUE)
conSock=accept(listenSock,(sockaddr*)&
remoteAddr,&
remoteAddrLen);
if(conSock==INVALID_SOCKET)
Acceptfailed!
continue;
else
Acceptanewconnect:
%s\r\n"
inet_ntoa);
sendFile(conSock);
closesocket(conSock);
closesocket(listenSock);
WSACleanup();
return1;
2.客户端
\nTransmissionfinished\n"
Winsockinitfailed\n"
SOCKETconSock;
conSock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
Socketcreatefailed\n"
sockaddr_inservAddr;
=htons(SERVERPORT);
=inet_addr("
"
if(connect(conSock,(sockaddr*)&
servAddr,sizeof(servAddr))==-1)
Connectfailed\n"
Connecttoserversucceed\n"
receiveFile(conSock);
3.管理系统
#include<
>
#defineSYS_SIZE0XFFFFF*100
#defineBLOCK_SIZE512
FILE*f;
structfilsys{
ints_nfree;
longs_free[100];
ints_ninode;
ints_inode[96];
}*p;
structindex_block{
longs_free[96];
}q;
structfilelist{
charname[14];
intinode_num;
}file;
structinode{
inti_size;
intblock_amount;
longi_addr[16];
charcreate_time[25];
}inode;
structfcb{
charname[12];
intused;
}fcb[5],*ptr;
structopen_file_table{
intoffset;
structfcb*f_node;
}table[5];
structfd{
structopen_file_table*t_node;
}fd[5];
FILE*apply_room(char*sys_name)
{
f=fopen(sys_name,"
w+b"
sed==1)
{
if(!
strcmp(fcb[k].name,name))
returnfcb[k].inode_num;
k++;
}while(k<
5);
return-1;
voidcreate()
inti,inode_num;
longt;
inputfilename:
scanf("
%s"
name);
getchar();
if(namei(name)!
=-1)printf("
fileexited!
inode_num=ialloc();
strcpy,name);
=inode_num;
fseek(f,BLOCK_SIZE+inode_num*16,SEEK_SET);
fwrite(&
file,sizeof(structfilelist),1,f);
=0;
for(i=0;
i<
16;
i++)[i]=0;
time(&
t);
strcpy,ctime(&
t));
fseek(f,4*BLOCK_SIZE+inode_num*sizeof(structinode),SEEK_SET);
inode,sizeof(structinode),1,f);
p->
s_inode[inode_num]=0;
createsucessfully!
voiddisplay()
intk;
for(k=0;
k<
96;
k++)
if(p->
s_inode[k]>
fseek(f,BLOCK_SIZE+k*16,SEEK_SET);
fread(&
%s"
;
fseek(f,4*BLOCK_SIZE+*sizeof(structinode),SEEK_SET);
size:
"
time:
%s\n"
};
voidopen_file()
{inti=0,j=0,k=0;
intm,n;
inputfile'
sname:
n=namei(name);
if(n==-1)printf("
filenotexits!
elseif(p->
s_inode[n]>
0)printf("
filehavealreadybeenopened!
else{
while(fcb[i].used==1)i++;
while(table[j].f_node)j++;
while(fd[k].t_node)k++;
fd[k].t_node=&
table[j];
table[j].f_node=&
fcb[i];
strcpy(fcb[i].name,name);
fcb[i].inode_num=n;
fcb[i].used=1;
fseek(f,4*BLOCK_SIZE+n*sizeof(structinode),SEEK_SET);
fcb[i].i_size=;
fcb[i].block_amount=;
for(m=0;
m<
m++)fcb[i].i_addr[m]=[m];
s_inode[n]=k+100;
fileisopen!
voidwrite_file()
{intsizeQ2;
intk,block_amount,n,size=0,i=0;
longblock_num;
charch,name[12];
n=name_i(name);
filenotexitsornotopen!
k=p->
s_inode[n]-100;
ptr=fd[k].t_node->
f_node;
while(i<
ptr->
block_amount)
block_num=ptr->
i_addr[i];
myfree(block_num);
i++;
block_amount=0;
inputthecontextofthefile:
(endthefilewith'
*'
)\n"
while((ch=getchar())!
='
&
block_amount<
16){
size++;
if(sizeQ2==1){
block_num=myalloc();
[block_amount]=ptr->
i_addr[block_amount]=block_num;
block_amount++;
fseek(f,(block_num-1)*BLOCK_SIZE,SEEK_SET);
fputc(ch,f);
=ptr->
i_size=size;
block_amount=block_amount;
voidread_file()
intk,n,block_amount,size;
inti=0;
charname[12],buf[512];
size=ptr->
i_size;
block_amount=ptr->
block_amount;
i++)
if(size>
512){fread(buf,sizeof(char),512,f);
size=size-512;
fread(buf,sizeof(char),size,f);
buf[size]='
\0'
buf);
voiddel_file()
{intn,i=0;
fileisopennow!
Closeitfirst\n"
s_inode[n]=-1;
block_num=[i];
strcpy,"
fseek(f,BLOCK_SIZE+n*16,SEEK_SET);
fileisdeleted\n"
voidclose_file()
{intk,n;
filenotexitsornotopen\n"
fd[k].t_node->
f_node->
used=0;
f_node=NULL;
fd[k].t_node=NULL;
s_inode[n]=0;
fileisclosed!
voidmyexit()
{inti=0;
charch;
while(fcb[i].used==0)i++;
if(i<
5){
somefilesarestillopen!
!
input'
q'
toquitorotherkeytoreturn:
%c"
&
ch);
if(ch=='
){
5){
if(fcb[i].used==1)p->
s_inode[fcb[i].inode_num]=0;
fseek(f,0,SEEK_SET);
fwrite(p,sizeof(structfilsys),1,f);
exit(0);
}else{
voidmain()
inti;
charch,sys_name[15];
p=(structfilsys*)malloc(sizeof(structfilsys));
while
(1)
1:
Createanewfilesystem\n"
2:
openanexistedfilesystem\n"
p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机网络 文件传输 管理 系统 课程设计 报告