基于select I/O模型的远程目录浏览与多线程文件下载
http://tech.ddvip.com 2007年03月17日 社区交流
本文详细介绍基于select I/O模型的远程目录浏览与多线程文件下载
摘要:
服务器端基于select I/O模型。为防止程序界面阻塞, 有一个子线程用于不断接收socket并select其中的处理。客户端只有一个线程函数, 不过其利用率很高, 可用于远程目录交换, 请求文件大小, 创建若干线程来下载文件。文件传输有上传和下载,还有对等传输, 这个项目中, 传输文件具体指下载。
正文:
一 数据及数据结构
1 传送包, 客户端主线程给子线程传递的结构体
typedef struct{
char packetType; // 请求类型 r:request rootdriver d:directory f:file D::data
unsigned int length; //用于传送int类型
char content[2000]; //传送的内容
}DATA_PACKET;请求类型:'r':服务器逻辑盘符, d; 盘符和文件夹下的文件夹和文件名, f':文件大小, D:文件内容。
在客户端请求下载文件, length末两位用于记录下载的线程总数, 前面的用于记录当前的线程序号。在服务器端这个反运算很容易实现。
在请求文件大小和请求下载时, content都用于保存请求文件的绝对路径.这个在服务器端做反运算要用自定义函数处理。
2 全局变量(用于线程间的通信)
char* pDrives; // 数据缓冲
CString arrFiles[200]; //文件目录字符串数组
CString savePath; //文件保存路径
long fSize=0l, ,recvFSize=0l; //文件大小,已经接收的文件大小
CString strIP; //IP
bool thrFlag=false; //下载线程创建置位理论上讲, 在程序中应尽量避免使用全局变量,因为破坏程序结构, 君不见Java和C#完全面向类。但为了方便, 所以就用了全局变量, 且是应用程序级的, 这样线程间的通讯很方便。值得一提的是, 这里thrFlag很重要, 它涉及到确保线程创建一定正确的问题, 在后面“要注意的几点问题”中会更详细的讨论。
作者:李建成 责编:豆豆技术应用
正在加载评论...
- VC/VC++按钮设计专题
- VC/VC++ 菜单专题
- VC/VC++ 工具条专题
- VC/VC++ 对话框教程
- VC/VC++ 报表教程
- VC/VC++ 控件
- VC/VC++ GDI
- Visual Studio 2008
- VC/VC++ MFC教程
- VC/VC++ QQ
- VC/VC++ Socket编程
- VC/VC++ 钩子编程
- TangramMini组件应用教程
- VC/VC++ 窗体
- VC/VC++ ADO 教程
- Windows CE 教程
- VC/VC++ DLL(动态链接库)编程
- VC/VC++ PDFlib
- VC与MATLAB编程
- VC/VC++ DirectShow 教程
- VC++入门视频教程
- VC/VC++ COM组件设计与应用
- VC/VC++ ATL
- VC/VC++ WTL
- VC/VC++ 定制调试诊断工具和程序
- VC/VC++ 进程
- VC/VC++ Win32
- VC/VC++ WMI
- VC/VC++ 消息
- 更多VC/VC++专题……