我的毕业设计是用socket(要求不能用CSocket类派生)做一个文件传输工具。分为“接收端”和“发送端”。“接收端”监听网络,然后“发送端”向一个已经开始监听网络的“接收端”发送文件,文件传输的socket连结是在线程中动态建立的!而不像网上很多源代码是,事先让“接收端”和“发送端”建立连结,文件传输只限于这两台计算机之间。我的设计是可以让“接收端”同时接收不同发送端发送过来的文件;“发送端”也可以同时向不同的接收端发送文件。  
       我想做成多线程的,就像FlashGet那样,可以同时传输多个文件(多线程);可以对每一个传输中的文件进行:“开始”、“暂停(包括文件断点续传)”、“停止”、“删除”这些基本的操作。  
       目前我已经实现了传输功能,可是我不知道怎么“停止”文件的传输。也就是说,我现在的做出来的程序,一旦文件开始传输,就失去了对文件的控制,不能使文件传输停止。但是文件传输不会出错(局域网内)。  
       在网上找了很多的源代码来看,但都是单线程的(单线程中停止传输很好实现)。自己写出这里也停下来了。我为每一个传输文件写一个线程,但仅仅用多线程实现了传输的功能。而对于其他的功能比如:“暂停(包括文件断点续传)”、“停止”,却不知道怎样在各个线程中控制。因为我不知道怎样,在传输线程和主线程(程序线程)之间交换数据,怎样管理我建立起来的那些文件传输的线程。我只是想做得看上去像FlashGet那样。  
       总的说来,我遇到的棘手的问题就是:怎样在多线程中控制文件的传输????  
还有我并没有创建自己的socket类,也没有派生CSocket类!请高手指点迷失的我~~~~

解决方案 »

  1.   

    我的想法:
    首先要把你的socket通信改为异步模式,例如使用重叠I/O,保证线程不会阻塞;
    再者将通讯线程改为界面线程,这样可以灵活响应消息,容易控制
      

  2.   

    异步模式。
    线程池来管理客户端的连接。
    至少你可以一个队列里管理存储所有的客户端连接。至于断开文件传输,你可以采用消息的方式进行控制。定义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;再定义具体的控制消息