}
//回传欢迎消息 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() failed with error %d\\n\ return 0; }
5.初始化新的SOCKET_INF结构
char buff[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; }
return 0; }
………………………….
//接受数据
int CServer::RecvReq( LPSOCKET_INF pSI ) { static DWORD dwRecvBytes = 0; pSI->nStatus = WSA_RECV; }
…………
return 0;
7. 取得文件列表信息,并转换成字符串
BOOL bDetails = strstr(szCmd,\char buff[DATA_BUFSIZE];
UINT nStrLen = FileListToString( buff,sizeof(buff),bDetails); if( !bPasv )
………………
if( ReadFileToBuffer( szFile,buff, nFileSize ) == (DWORD)nFileSize )
{ // 处理Data FTP连接 Sleep( 10 ); if( bPasv ) { DataSend( sAccept,buff,nFileSize ); closesocket( sAccept ); }
…………………
(四)FTP服务器端运行后的界面
图3
上面得图是在添加用户名等,为了能下载自己的文件。端口设定为21是固定的。
下面的图是添加用户后在点击HESY用户和开始服务后所得界面。
图4
四、调试结果
在点击开始服务后就转到客户端运行所得界面上,然后点击CONNECT会连接到服务器端,会登陆到用户名以及所需要下载的文件。
图5
运行环境硬件环境:CPU的主频在200MHz以上、内存在64MB以上。
软件平台:操作系统为Windows 98/Me/NT/2000/XP(推荐使用Windows 2000/XP),调试环境为Visual C++ 6.0及其以上版本(如果不做说明,则默认为Visual C++ 6.0)。
程序流程
开始 连接FTP服务 得到要传输的文件 文件类表 是否存在传输记录 新增传输记录并保存 修改标识为异常 中断并保存 文件传输 断点续传 主要部分
图 是否被中断 删除该记录然后 保存传输清单 修改标识为中断,记录已传输字节数,并保存 结束
三、自选项目的项目报告
1、 2、 3、 4、 5、 6、
问题陈述 背景知识 动机
你所做的工作 系统描述
打算进行的工作或改进
[互联网]计算机网络课程设计任务书



