我的毕业设计是用socket(要求不能用CSocket类派生)做一个文件传输工具。分为“接收端”和“发送端”。“接收端”监听网络,然后“发送端”向一个已经开始监听网络的“接收端”发送文件,文件传输的socket连结是在线程中动态建立的!而不像网上很多源代码是,事先让“接收端”和“发送端”建立连结,文件传输只限于这两台计算机之间。我的设计是可以让“接收端”同时接收不同发送端发送过来的文件;“发送端”也可以同时向不同的接收端发送文件。
我想做成多线程的,就像FlashGet那样,可以同时传输多个文件(多线程);可以对每一个传输中的文件进行:“开始”、“暂停(包括文件断点续传)”、“停止”、“删除”这些基本的操作。
目前我已经实现了传输功能,可是我不知道怎么“停止”文件的传输。也就是说,我现在的做出来的程序,一旦文件开始传输,就失去了对文件的控制,不能使文件传输停止。但是文件传输不会出错(局域网内)。
在网上找了很多的源代码来看,但都是单线程的(单线程中停止传输很好实现)。自己写出这里也停下来了。我为每一个传输文件写一个线程,但仅仅用多线程实现了传输的功能。而对于其他的功能比如:“暂停(包括文件断点续传)”、“停止”,却不知道怎样在各个线程中控制。因为我不知道怎样,在传输线程和主线程(程序线程)之间交换数据,怎样管理我建立起来的那些文件传输的线程。我只是想做得看上去像FlashGet那样。
总的说来,我遇到的棘手的问题就是:怎样在多线程中控制文件的传输????
还有我并没有创建自己的socket类,也没有派生CSocket类!请高手指点迷失的我~~~~
我想做成多线程的,就像FlashGet那样,可以同时传输多个文件(多线程);可以对每一个传输中的文件进行:“开始”、“暂停(包括文件断点续传)”、“停止”、“删除”这些基本的操作。
目前我已经实现了传输功能,可是我不知道怎么“停止”文件的传输。也就是说,我现在的做出来的程序,一旦文件开始传输,就失去了对文件的控制,不能使文件传输停止。但是文件传输不会出错(局域网内)。
在网上找了很多的源代码来看,但都是单线程的(单线程中停止传输很好实现)。自己写出这里也停下来了。我为每一个传输文件写一个线程,但仅仅用多线程实现了传输的功能。而对于其他的功能比如:“暂停(包括文件断点续传)”、“停止”,却不知道怎样在各个线程中控制。因为我不知道怎样,在传输线程和主线程(程序线程)之间交换数据,怎样管理我建立起来的那些文件传输的线程。我只是想做得看上去像FlashGet那样。
总的说来,我遇到的棘手的问题就是:怎样在多线程中控制文件的传输????
还有我并没有创建自己的socket类,也没有派生CSocket类!请高手指点迷失的我~~~~
解决方案 »
- 这是一个判断IP地址类型的MFC程序 有点错误 无法解决 希望各位在线的帮忙看看
- 在vs2010上配置vlfeat
- CAccess 读取文件内容提示 D:\data.txt 格式错误
- 我是新手,求救各位大侠了!!!
- 如何得到Cbitmap的图象数据区
- vc 安装错误 请大家帮一下忙
- 为什么文件删不掉,急!急!急!在线等待
- 在发行带有使用ADO接口连接数据库的COM组件的应用程序中,还需要打包哪些文件?
- CryptImportKey
- 请教高手,怎样将一块硬盘虚拟成内存,并实现内存碎片的整理,某个学校的题目,帮别人问的
- 谁有《Visual C++数字图像处理》电子版书和其中的自定义图像处理库啊?急求!!
- 急急急!!!VC中进程监管的实现方法,高手请进....
首先要把你的socket通信改为异步模式,例如使用重叠I/O,保证线程不会阻塞;
再者将通讯线程改为界面线程,这样可以灵活响应消息,容易控制
线程池来管理客户端的连接。
至少你可以一个队列里管理存储所有的客户端连接。至于断开文件传输,你可以采用消息的方式进行控制。定义C/S之间的消息格式。
比如:
// 消息头
typedef struct tagHeadMsg{
int MsgType;
int MsgClass;
int MsgLength;
int CRC;
int Flag;
}tHeadMsg, *ptHeadMsg;// 主消息
typedef struct tagMainMsg{
tHeadMsg Head;
void * Buffer;
}tMainMsg, *ptMainMsg;再定义具体的控制消息