WEB开发网
开发学院软件开发VC 基于select I/O模型的远程目录浏览与多线程文件下... 阅读

基于select I/O模型的远程目录浏览与多线程文件下载

 2007-03-17 22:00:56 来源:WEB开发网   
核心提示: 3 目录树类CExtnTreeCtrl::CTreeCtrl该类继承于CTreeCtrl类, 主要扩展获得树的某个项目在整棵树的完整路径, 以便把这个路径规格化后能向服务器请求文件,在这里还实现了将一个完整路径转为文件名的函数,基于select I/O模型的远程目录浏览与多线程文件下载(2

3 目录树类CExtnTreeCtrl::CTreeCtrl

该类继承于CTreeCtrl类, 主要扩展获得树的某个项目在整棵树的完整路径, 以便把这个路径规格化后能向服务器请求文件。在这里还实现了将一个完整路径转为文件名的函数。

对于如何构造这棵树, 有一个很方便高效的办法:双击树,把双击的项作为根.如果为盘符或文件夹, 就发送请求给服务器, 待服务器返回, 自动填充在这个项下。如果为文件, 则该项名有扩展名, 将请求下载。这个办法操作起来方便, 而且还提高了系统性能, 至少在局域网是这样。如果就一次从服务器中请求整个文件系统的目录内容, 肯定会慢很多。

4.参数设置对话框类 CSetParam

这个类用于设置下载的线程数目, 和默认的保存文件夹路径。这个类会写一个“Setting.ini”文件在C盘以保存参数。具体来说,如果用户一直都没有设置这些参数的话, 那么GetPrivateProfileString(...)试图读取"C:Setting.ini"文件会返回默认的线程数0, 和一个不是表示路径的字条串“defaultpath”, 这时, 下载程序会自动设置参数, 分别为3, “C:”。

二 几个要注意的问题

1 MFC与Windows API

就多线程编写网络程序而言, 如果使用MFC的CAsyncSocket或CSocket, 主线程给子线程传参量是一个非常头痛的问题, 如果用Windows API实现就灵活多了。在文件操作方面, CFile还不错。尽管如此, 我还是用了Windows API函数, 为了设计满足要求。

2  socket传送字符串或字符串数组

理论上, send是底层函数, 只要指定缓冲区首地址指针和缓冲区大小, 不管什么狗屎垃圾它都会帮你把这片内存的内容send 出去。然而, 如果是字符串数组甚至字符串, 或者包含这两者其中之一的封包, 内容是被 send 走了, 接收端缓冲区也显示接收到了, 不过不是你想要的内容, 再看字符串(数组)还是空空然。

上一页  1 2 3 4 5 6 7  下一页

Tags:基于 select 模型

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接