FTP服务器与客户端设计与开发

上传人:大米 文档编号:488154336 上传时间:2022-09-18 格式:DOCX 页数:33 大小:31.53KB
返回 下载 相关 举报
FTP服务器与客户端设计与开发_第1页
第1页 / 共33页
FTP服务器与客户端设计与开发_第2页
第2页 / 共33页
FTP服务器与客户端设计与开发_第3页
第3页 / 共33页
FTP服务器与客户端设计与开发_第4页
第4页 / 共33页
FTP服务器与客户端设计与开发_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《FTP服务器与客户端设计与开发》由会员分享,可在线阅读,更多相关《FTP服务器与客户端设计与开发(33页珍藏版)》请在金锄头文库上搜索。

1、FTP服务器与客户端设计与开发详细设计程序包括5个主要功能:1. 服务器的运行:启动和停止FTP服务2. 用户管理:添加用户,删除用户和设置用户权限3. 服务器配置:设置服务器开放端口,最大连接数等4. 运行统计:统计当前服务器运行时期上传下载的流量等等5. 安全设置:允许连接服务器的IP列表,以及禁止访问的IP服务器的运行模块功能:负责FTP服务器的运行。使用类:CFTPServer 类,CApplicationDlg 类,CListenSocket 类,CConnectThread 类,CConnectSocket 类各种类的功能:1. CFTPServer类:是CWnd的子类,作为程序的

2、顶层类,负责实现或者调用各个成员函数2. CApplicationDlg类:CDialog类的子类,实现程序主窗口。3. CListenSocket类:负责监听FTP客户端连接,并实现有效连接4. CConnectThread类:负责实现并保证多个连接的有效性。5. CConnectSocket类:实现FTP命令的解析,数据的发送和接收CFTPServer 类作为服务器的顶层类,实现服务器开始运行时的所有成员函数申明如下:class CFTPServer : public CWndfriend CConnectSocket;/CConnectSocket作为其友元类,可以访问内部私有数据成 员

3、public:void SetGoodbyeMessage(LPCTSTR lpszText);/发送退出信息void SetWelcomeMessage(LPCTSTR lpszText);/发送欢迎信息void SetTimeout(int nValue);/设置暂停时间void SetPort(int nValue);/设置端口void SetMaxUsers(int nValue);/设置最大连接数void SetStatisticsInterval(int nValue);/统计时间间隔BOOL IsActive();/是否有效void Stop();BOOL Start();CFT

4、PServer();virtual CFTPServer();CUserManager m_UserManager;/用户管理对象CSecurityManager m_SecurityManager;/安全策略CFTPServer 类最主要的成员函数是start ()和stop (),分别负责ftp服务器的开始运行和结束运行函数声明如下:*/*/* Function name : Start*/* Description : Start listining on port 21 and accept new*/*connections.*/*/*BOOL CFTPServer:Start()i

5、f (m_bRunning)return FALSE;/如果运行,返回错误标志/ create dummy window for message routingif (!CWnd:CreateEx(0, AfxRegisterWndClass(0), FTP Server Notification Sink, WS_POPUP, 0,0,0,0, NULL, 0)AddTraceLine(0, Failed to create notification window.);return FALSE;/开始创建socketif (m_ListenSocket.Create(m_nPort)/ st

6、art listeningif (m_ListenSocket.Listen()m_ListenSocket.m_pWndServer = this;m_bRunning = TRUE;SetTimer(1, m_nStatisticsInterval, NULL);AddTraceLine(0, FTP Server started on port %d.”, m_nPort);return TRUE;AddTraceLine(0, FTP Server failed to listen on port %d.”, m_nPort);/ destroy notification window

7、if (IsWindow(m_hWnd)DestroyWindow();m_hWnd = NULL;return FALSE;*/*/* Functionname:Stop*/* Description:Stop FTP server.*/*/*void CFTPServer:Stop()if (!m_bRunning)return;/ stop statistics timerKillTimer(1);m_bRunning = FALSE;m_ListenSocket.Close();CConnectThread* pThread = NULL;/ close all running thr

8、eadsdom_CriticalSection.Lock();POSITION pos = m_ThreadList.GetHeadPosition();if (pos != NULL)pThread = (CConnectThread *)m_ThreadList.GetAt(pos);m_CriticalSection.Unlock();/ save thread membersint nThreadID = pThread-m_nThreadID;HANDLE hThread = pThread-m_hThread;AddTraceLine(0, %d Shutting down thr

9、ead., nThreadID);/ tell thread to stoppThread-SetThreadPriority(THREAD_PRIORITY_HIGHEST);pThread-PostThreadMessage(WM_QUIT,0,0);/ wait for thread to end, while keeping the messages pumping (max 5seconds)if (WaitWithMessageLoop(hThread, 5000) = FALSE)/ thread doesnt want to stoppedAddTraceLine(0, %d

10、Problem while killing thread., nThreadID);/ dont try again, so removem_CriticalSection.Lock();POSITION rmPos = m_ThreadList.Find(pThread);if (rmPos != NULL)m_ThreadList.RemoveAt(rmPos);m_CriticalSection.Unlock();elseAddTraceLine(0, %d Thread successfully stopped., nThreadID);elsem_CriticalSection.Un

11、lock();pThread = NULL;while (pThread != NULL);AddTraceLine(0, FTP Server stopped.);if (IsWindow(m_hWnd) DestroyWindow();m_hWnd = NULL;CListenSocket 类用于监听每个客户的连接,CListenSocket类是CAsyncSocket的子类,其成员函数listen 监听来自客户端的连接,当监听到可以接收的socket的时候通过OnAccept函数准备创建 有效连接的进程。函数如下:void CListenSocket:OnAccept(int nErro

12、rCode)/ New connection is being establishedCSocket sockit;/ Accept the connection using a temp CSocket object.Accept(sockit);/ Create a thread to handle the connection. The thread is created suspended so that we can/ set variables in CConnectThread before it starts executing.CConnectThread* pThread

13、=(CConnectThread*)AfxBeginThread(RUNTIME_CLASS(CConnectThread), THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED);if (!pThread)sockit.Close();TRACE(Could not create threadn);return;CFTPServer *pWnd = (CFTPServer *)m_pWndServer;/ since everything is successful, add the thread to our listpWnd-m_CriticalSection.Lock();pWnd-m_ThreadList.AddTail(pThread);pWnd-m_CriticalSection.Unlock();/ save pointerpThread-m_

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

最新文档


当前位置:首页 > 机械/制造/汽车 > 综合/其它

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