CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  网络及通讯开发

文件传送的问题实现请讨论!

楼主ben3(炮弹)2004-12-03 21:13:59 在 C++ Builder / 网络及通讯开发 提问

对不起,回复不能超过3次,所以再开贴,原文,  
   
  实现的功能:      
  客户端向服务端发出请求,服务端根据配置(主要是判断客户端合法性和允许下载时间,速      
     
  率等)响应多个客户端,提供多个不同文件给客户端下载。      
     
  要解决以下问题:      
  1.要用到压缩,但找不到好用的控件.      
  2.要用多线程传送到不同客户端.      
  3.如何限制传送文件的速率,因为要在白天速率低些,晚上全速(要在服务端实现).      
  4.最多三个客户端连接上服务端,第四个要等待前三个其中一个完成才能下载.      
     
  请大家讨论下,最好给出对应的代码。      
   
   
  再续     http://community.csdn.net/Expert/topic/3595/3595205.xml?temp=.3089563  
   
  server   的.h  
   
  //---------------------------------------------------------------------------  
   
  #ifndef   Unit1H  
  #define   Unit1H  
  //---------------------------------------------------------------------------  
  #include   <Classes.hpp>  
  #include   <Controls.hpp>  
  #include   <StdCtrls.hpp>  
  #include   <Forms.hpp>  
  #include   <ComCtrls.hpp>  
  #include   <ScktComp.hpp>  
  //---------------------------------------------------------------------------  
   
  #define   FILEDATAMAXSIZE   2048//文件包的传输长度  
  typedef   struct   TFileData//发布包的长度  
  {  
  int   nPosition;//当前传输的次数  
  short   wLength;//当前传输的长度  
  int   width;//文件的实际长度  
  CHAR   FileData[FILEDATAMAXSIZE];//文件包  
  }TFileData;  
   
   
   
   
   
  class   TForm1   :   public   TForm  
  {  
  __published: //   IDE-managed   Components  
                  TButton   *Button1;  
                  TServerSocket   *ServerSocket1;  
                  TMemo   *Memo1;  
                  TLabel   *Label1;  
                  TProgressBar   *ProgressBar1;  
                  TLabel   *Label2;  
                  TLabel   *Label3;  
                  TButton   *Button2;  
                  void   __fastcall   Button1Click(TObject   *Sender);  
                  void   __fastcall   ServerSocket1ClientRead(TObject   *Sender,  
                      TCustomWinSocket   *Socket);  
                  void   __fastcall   Button2Click(TObject   *Sender);  
                  void   __fastcall   ServerSocket1ClientError(TObject   *Sender,  
                      TCustomWinSocket   *Socket,   TErrorEvent   ErrorEvent,  
                      int   &ErrorCode);  
                  void   __fastcall   ServerSocket1ClientConnect(TObject   *Sender,  
                      TCustomWinSocket   *Socket);  
  private: //   User   declarations  
  public: //   User   declarations  
                  __fastcall   TForm1(TComponent*   Owner);  
   
  int   filewidth;//服务器端文件长度通用变量  
  int   fssl;//实际的发送数量  
  int   myfilewidth;//客户器端文件长度通用变量  
   
   
   
  };  
  //---------------------------------------------------------------------------  
  extern   PACKAGE   TForm1   *Form1;  
  //---------------------------------------------------------------------------  
  #endif  
   
   
   
  server   的   .cpp  
   
  //---------------------------------------------------------------------------  
   
  #include   <vcl.h>  
  #pragma   hdrstop  
   
  #include   "Unit1.h"  
  //---------------------------------------------------------------------------  
  #pragma   package(smart_init)  
  #pragma   resource   "*.dfm"  
  TForm1   *Form1;  
  //---------------------------------------------------------------------------  
  __fastcall   TForm1::TForm1(TComponent*   Owner)  
                  :   TForm(Owner)  
  {  
  }  
  //---------------------------------------------------------------------------  
   
  void   __fastcall   TForm1::Button1Click(TObject   *Sender)  
  {  
        ServerSocket1->Port     =3377;  
        ServerSocket1->Active=true   ;  
        Memo1->Lines->Add("Server   staring!");  
   
   
   
  }  
  //---------------------------------------------------------------------------  
   
  void   __fastcall   TForm1::ServerSocket1ClientRead(TObject   *Sender,  
              TCustomWinSocket   *Socket)  
  {  
   
   
          AnsiString   str;  
          str   =   Socket->ReceiveText();  
          if   (str=="1")  
                {  
                    Memo1->Lines->Add("receive   client   messgae   1   ");  
                    TFileData   dp;  
                    int   hFile;  
                    if   (FileExists("d:\\2004.dat"))  
                          {  
                                  hFile   =   FileOpen("d:\\2004.dat",   fmOpenRead   |   fmShareCompat   |    
   
  fmShareDenyNone);  
                                  if   (hFile   >   0)   //打开文件成功  
                                              {  
  dp.width   =   FileSeek(hFile,0,2);//获取文件的实际长度  
  filewidth   =   dp.width;//赋值服务器端文件长度通用变量  
  dp.nPosition   =   0;  
  fssl   =   0;  
  FileSeek(hFile,0,0);//查找文件的读取点  
  dp.wLength   =   FileRead(hFile,   dp.FileData,   FILEDATAMAXSIZE);//按照文件包的长度从  
   
  文件的读取点读取文件  
   
  FileClose(hFile);  
                                                    }  
   
                          }  
   
                                    Socket->SendBuf(&dp,   sizeof(dp));//发送文件包  
                                    ProgressBar1->Max   =   filewidth;//赋值进度条的长度  
  }  
   
  if   (str=="ok")  
   
  {  
                      TFileData   dp;  
                      int   hFile;  
  if   (FileExists("d:\\2004.dat"))  
                    {  
                        hFile   =   FileOpen("d:\\2004.dat",   fmOpenRead   |   fmShareCompat   |    
   
  fmShareDenyNone);  
                              if   (hFile   >   0)   //打开文件成功  
                                  {  
                                              fssl   =   fssl   +1;  
   
                                                if   (filewidth-fssl*FILEDATAMAXSIZE>=FILEDATAMAXSIZE)//判  
   
  断包的大小  
                                                          {  
  dp.width   =   filewidth;  
  dp.nPosition   =   fssl;  
  FileSeek(hFile,fssl*FILEDATAMAXSIZE,0);  
  dp.wLength   =   FileRead(hFile,   dp.FileData,   FILEDATAMAXSIZE);  
  //   FileSeek(hFile,   0,   0);  
   
  FileClose(hFile);  
                                                                  }  
   
  else                         //读剩余的少于2048的文件包--ben注  
                {  
                      dp.width   =   filewidth;  
                      dp.nPosition   =   fssl;  
                      FileSeek(hFile,fssl*FILEDATAMAXSIZE,0);  
                      dp.wLength   =   FileRead(hFile,   dp.FileData,    
   
  filewidth-fssl*FILEDATAMAXSIZE);  
  //   FileSeek(hFile,   0,   0);  
   
                      FileClose(hFile);  
   
                      }  
   
                      }  
   
            }  
                          Socket->SendBuf(&dp,   sizeof(dp));  
   
  }  
   
   
   
   
   
   
   
   
   
   
  }  
  //---------------------------------------------------------------------------  
  void   __fastcall   TForm1::Button2Click(TObject   *Sender)  
  {  
      ServerSocket1->Active   =   false;  
      Memo1->Lines->Add("Server   stop!");  
   
   
  }  
  //---------------------------------------------------------------------------  
  void   __fastcall   TForm1::ServerSocket1ClientError(TObject   *Sender,  
              TCustomWinSocket   *Socket,   TErrorEvent   ErrorEvent,   int   &ErrorCode)  
  {  
    //   ErrorCode=0;  
   
   
   
   
  }  
  //---------------------------------------------------------------------------  
  void   __fastcall   TForm1::ServerSocket1ClientConnect(TObject   *Sender,  
              TCustomWinSocket   *Socket)  
  {  
      //       Memo1->Lines->Add()  
   
      ServerSocket1->Socket->Connections[0]->SendText("you   connet   this   server");  
   
      Memo1->Lines->Add(Socket->RemoteAddress+":"+IntToStr(Socket->RemotePort));  
   
   
   
   
  }  
  //---------------------------------------------------------------------------  
   
       
  问题点数:0、回复次数:1Top

1 楼lihongxing2002(潇洒)回复于 2004-12-09 09:10:10 得分 0

upTop

相关问题

  • 如何在实现文件的传送?
  • 文件传送
  • 文件传送?
  • 用类CAsyncSocket实现文件传送的一点疑问
  • 怎么用winsock实现两台PC之间的文件传送
  • 怎么用winsock实现两台PC之间的文件传送?
  • 在VB中怎么实现局域网里的文件传送?
  • 怎样才能,在ASP中实现上下传送文件
  • 同时多文件传送的实现,只求思路
  • 讨论:exe文件捆绑机是如何实现的?

关键词

  • 文件
  • 客户
  • 下载
  • socket
  • fastcall
  • serversocket
  • tfiledata
  • 传送
  • tform
  • tcustomwinsocket

得分解答快速导航

  • 帖主:ben3

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo