")!=-1)
m_bDirectory=TRUE;
else
m_bDirectory=FALSE;
if(strLine.GetLength()<40)
returnFALSE;
m_strName=strLine.Mid(39);
m_strDate=strLine.Left(18);
m_strName.TrimLeft();
m_strName.TrimRight();
returnTRUE;
}
m_bSec=0;
for(inti=0;i<9;i++){
ch=strLine.GetAt(i);
if(ch=='-')
m_bSec|=0x01;
m_bSec<<=1;
}
m_strSec=strLine.Mid(1,9);
intndx=strLine.Find(':
');
if(ndx==-1){
if(strLine.GetLength()>56)
ndx=51;
else
returnFALSE;
}
m_index=ndx;
m_strName=strLine.Mid(ndx+3);
m_strName.TrimLeft();
m_strName.TrimRight();
m_strDate=strLine.Mid(ndx-9,12);
returnTRUE;
}
(二)客户端运行后的界面
图2
上面的图是运行后在修改了用户名和密码,查出所需要的文件的I盘和文件名。
客户端运行后看到的的服务器端地址是所用电脑的
(三)FTP服务器端代码
1.Socket编程中的Server()函数
UINTServerThread(LPVOIDlpParameter)
{
SOCKETsListen,sAccept;
SOCKADDR_INinetAddr;
DWORDdwFlags;
DWORDdwRecvBytes;
CServer*server=(CServer*)lpParameter;
2.创建第一个手动重置对象
if((g_events[0]=WSACreateEvent())==WSA_INVALID_EVENT)
{
printf("错误:
WSACreateEventfailedwitherror%d\n",WSAGetLastError());
return0;
}
3.创建一个线程处理请求
AfxBeginThread(ProcessTreadIO,(LPVOID)server);
if(CreateThread(NULL,0,ProcessTreadIO,(void*)server,0,&dwThreadId)==NULL)
{
printf("错误:
CreateThreadfailedwitherror%d\n",GetLastError());
return0;
}
g_dwEventTotal=1;
while(!
server->m_bStop)
{
//处理入站连接
if((sAccept=accept(sListen,NULL,NULL))==INVALID_SOCKET)
{
printf("错误:
acceptfailedwitherror%d\n",WSAGetLastError());
return0;
}
//回传欢迎消息
if(!
server->WelcomeInfo(sAccept))break;
//设置ftp根目录
if(!
SetCurrentDirectory(server->m_Directory))break;
4.创建一个新的SOCKET_INF结构处理接受的数据socket.
if((g_sockets[g_dwEventTotal]=(LPSOCKET_INF)
GlobalAlloc(GPTR,sizeof(SOCKET_INF)))==NULL)
{
printf("错误:
GlobalAlloc()failedwitherror%d\n",GetLastError());
return0;
}
5.初始化新的SOCKET_INF结构
charbuff[DATA_BUFSIZE];memset(buff,0,DATA_BUFSIZE);
g_sockets[g_dwEventTotal]->wsaBuf.buf=buff;
g_sockets[g_dwEventTotal]->wsaBuf.len=DATA_BUFSIZE;
g_sockets[g_dwEventTotal]->s=sAccept;
memset(&(g_sockets[g_dwEventTotal]->o),0,sizeof(OVERLAPPED));
g_sockets[g_dwEventTotal]->dwBytesSend=0;
g_sockets[g_dwEventTotal]->dwBytesRecv=0;
g_sockets[g_dwEventTotal]->nStatus=WSA_RECV;//接收
6.下载数据的有关代码
//已经有数据传递
if(pSI->nStatus==WSA_RECV)
{
……………..
{
if(!
g_bLoggedIn)
{
if(server->LoginIn(pSI)==LOGGED_IN)
g_bLoggedIn=TRUE;
}
else
{
if(server->DealCommand(pSI)==FTP_QUIT)
continue;
}
//缓冲区清除
memset(pSI->buffRecv,0,sizeof(pSI->buffRecv));
pSI->dwBytesRecv=0;
}
}
else
{
pSI->dwBytesSend+=dwBytesTransferred;
}
//继续接收以后到来的数据
if(server->RecvReq(pSI)==-1)
return-1;
}
return0;
}
………………………….
//接受数据
intCServer:
:
RecvReq(LPSOCKET_INFpSI)
{
staticDWORDdwRecvBytes=0;
pSI->nStatus=WSA_RECV;
…………
return0;
}
7.取得文件列表信息,并转换成字符串
BOOLbDetails=strstr(szCmd,"LIST")?
TRUE:
FALSE;
charbuff[DATA_BUFSIZE];
UINTnStrLen=FileListToString(buff,sizeof(buff),bDetails);
if(!
bPasv)
………………
if(ReadFileToBuffer(szFile,buff,nFileSize)==(DWORD)nFileSize)
{
//处理DataFTP连接
Sleep(10);
if(bPasv)
{
DataSend(sAccept,buff,nFileSize);
closesocket(sAccept);
}
…………………
(四)FTP服务器端运行后的界面
图3
上面得图是在添加用户名等,为了能下载自己的文件。
端口设定为21是固定的。
下面的图是添加用户后在点击HESY用户和开始服务后所得界面。
图4
四、调试结果
在点击开始服务后就转到客户端运行所得界面上,然后点击CONNECT会连接到服务器端,会登陆到用户名以及所需要下载的文件。
图5
运行环境硬件环境:
CPU的主频在200MHz以上、内存在64MB以上。
软件平台:
操作系统为Windows98/Me/NT/2000/XP(推荐使用Windows2000/XP),调试环境为VisualC++6.0及其以上版本(如果不做说明,则默认为VisualC++6.0)。
程序主要部分流程图
三、自选项目的项目报告
1、问题陈述
2、背景知识
3、 动机
4、你所做的工作
5、系统描述
6、打算进行的工作或改进
问题陈述
1)了解大型网络规划
2)了解大型网络调试步骤
3)了解大型网络调试技能
背景知识
某高校随着学校教学和学生网上应用的增长,校园网以光纤连接了学校近70栋楼宇,覆盖了90%的教学办公场所和75%的学生宿舍,共有2万个网络端口,其中约有1.2万多个网络端口连接了网络设备,共接入交换机6000多台,有固定用户6000多人。
动机
由于原有设备已经无法满足当前的需求,所以该校觉得从新规划设计校园网,并提出如下需求:
1)要适应学校的网络特点要求:
用户数量庞大,网络应用复杂,不能再终端上限制网络用户行为,只能在设备上解决网络问题。
2)要能够达到轻载要求:
低负载,高带宽,最简单,最有效。
3)要具有先进的技术性:
支持线速转发,具备高密度的万兆端口,核心设备支持T级别以上的背板设计,硬件实现ACLQOS组播等功能。
4)要稳定、可靠,确保物理层、链路层、网络层、病毒环境下的稳定、可靠。
5)要有健壮的安全,不以牺牲网络性能为代价,实现病毒和攻击的防护、用户接入控制、路由协议安全。
6)要易于管理:
具备网络拓扑发现、网络设备集中管理、性能监督、分类查看管理事件的能力。
7)要实现弹性扩展:
包括背板带宽、交换容量、转发能力、端口密度、业务能力的可扩展。
相关设备:
出口设备RG-wall100一台
核心设备s6896e2台
汇聚设备s3550-242台
接入设备s2126G4台
主机8台
网络拓扑结构:
网络拓扑需求:
1)实现双核心网络冗余,sw3A、SW3B、SW2A、SW2B间创建ospf区域类型,区域号为AREA0
2)为实现网络的安全性,sw3A、SW3B、SW2A、SW2B的NATIVEvlan为VLAN493
3)在SW2A下创建VLAN10,VLAN20,VLAN30分别把PC1、PC4,PC2、PC5,PC3、PC6加入者三个VLAN。
同样,在SW2B下创建VLAN50,VLAN60,VLAN70分别把PC7、PC10,PC8、PC10,PC9、PC11加入者三个VLAN。
4)在SW3A和SW3B上配置路由接口,使他们之间可以传递路由信息。
5)在SW2A和SW2B上创建SVI,并配置IP地址。
6)实现全网全通
关键配置:
Sw3A:
hostnamesw3A
!
interfaceFastEthernet0/1
switchporttrunknativevlan493
switchportmodetrunk
!
interfaceFastEthernet0/2
switchporttrunknativevlan493
switchportmodetrunk
!
interfaceFastEthernet0/5
noswitchport
ipaddress192.168.128.1255.255.255.248
!
interfaceVlan114
ipaddress192.168.128.45255.255.255.248
!
interfaceVlan116
ipaddress192.168.128.67255.255.255.248
ipospfcost60
!
routerospf1
router-id3.3.3.3
network192.168.128.00.0.0.255area0
end
SW3B:
hostnameSW3B
!
interfaceFastEthernet0/1
switchporttrunknativevlan493
switchportmodetrunk
!
interfaceFastEthernet0/2
switchporttrunknativevlan493
switchportmodetrunk
!
interfaceFastEthernet0/5
noswitchport
ipaddress192.168.128.2255.255.255.248
!
terfaceVlan124
ipaddress192.168.129.45255.255.255.248
ipospfcost60
!
interfaceVlan126
ipaddress192.168.129.67255.255.255.248
!
routerospf1
router-id4.4.4.4
log-adjacency-changes
network192.168.0.00.0.255.255area0
!
end
Sw2A:
hostnameSW2A
!
interfaceFastEthernet0/1
switchportaccessvlan10
switchporttrunknativevlan493
switchportmodetrunk