当前位置:首页
开发技术指南» 文章正文
    引言:
 

 

    摘要: 每天都是那么忙,今天好不容易上一次,别提有多爽了。 pb,好东西。我喜欢。 ......
    摘要: 我是硕士毕业后当了程序员,但我原来本科和研究生都不是搞it的,是机械电气类的,现在在一家规模还算大的国内软件公司当程序员,做一些web控件,因为是半路出家,很多东西都不懂,以前的专业全都没用了,而在编程方面我只是一个初学者,所以感觉比较郁闷,开始的时候还觉得很多东西可以学,但编了一年程序后,基本掌握了现在工作需要的技能,一个项目来了,把别人提出的需求完成就行了,感觉就像一个代码工人,没什么......


一段关于网络传输文件的代码,请各位帮助分析分析。。给高分

各位高手,我下面这段代码呢,据说是高手唐晓锋的代码,是关于网络文件传输的。  
  请各位能不能帮助我加上文件的传输进度啊。。。在服务器端加上文件的传输进度显示。。。  
   
  我水平太菜,实验了很多方法。都不能成功。。还有一点。能不能修改成弹出保存文件的对话框来保存文件。。这个上面默认是保存在C盘根目录下的,谁能给修改一点。。多谢了。分数不够可以再加。。。。  
   
  客户端  
   
  unit   mail;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,   ScktComp,   StdCtrls,   ComCtrls;  
   
  type  
      TCon   =   record  
          FileName   :   String;  
          TotalSize   :   Integer;  
          Status   :   Integer;  
      end;  
   
      PCON   =   ^TCON;  
   
      TForm1   =   class(TForm)  
          ClientSocket1:   TClientSocket;  
          Edit1:   TEdit;  
          Label1:   TLabel;  
          Label2:   TLabel;  
          Edit2:   TEdit;  
          Button1:   TButton;  
          Button2:   TButton;  
          Edit3:   TEdit;  
          OpenDialog1:   TOpenDialog;  
          StatusBar1:   TStatusBar;  
          Label3:   TLabel;  
          procedure   Button1Click(Sender:   TObject);  
          procedure   Button2Click(Sender:   TObject);  
          procedure   ClientSocket1Error(Sender:   TObject;   Socket:   TCustomWinSocket;  
              ErrorEvent:   TErrorEvent;   var   ErrorCode:   Integer);  
          procedure   FormCreate(Sender:   TObject);  
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
      end;  
   
  var  
      Form1:   TForm1;  
   
  implementation  
   
  {$R   *.dfm}  
  var     Count   :   Integer;  
   
  function   GetFileSize(const   FileName:   string):integer;  
  var   f   :   TFileStream;  
  begin  
          f   :=   TFileStream.Create(FileName,fmOpenRead   or   fmShareDenyNone);  
          Result   :=f.Size;  
          F.Free;  
  end;  
  procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
    if   clientsocket1.Socket.Connected=false   then  
          begin  
            ClientSocket1.Address:=edit1.Text;  
            ClientSocket1.Port   :=strtoint(edit2.Text);  
            ClientSocket1.Open;  
          end;  
    with   OpenDialog1   do  
      begin  
              Execute;  
              if   FileName   <>     then  
              begin  
                      Edit3.Text   :=UPLOAD   +   ExtractFileName(FileName)   +   +Inttostr(GetFileSize(FileName));  
                      Label3.Caption   :=   FileName;  
                      ClientSocket1.Socket.SendText(edit3.Text);  
              end;  
      end;  
  end;  
   
  procedure   TForm1.Button2Click(Sender:   TObject);  
  var   stream   :   TFileStream;  
          Buf   :   pointer;  
  begin  
      stream   :=   TFileStream.Create(label3.Caption   ,fmOpenRead   or   fmShareDenyNone);  
      GetMem(Buf,stream.Size);//建立一指定大小的动态变量,并将指针指向该处  
      stream.Seek(0,soFromBeginning);//移动流中指针的位置,移动后指针距离数据开始的位置  
      stream.ReadBuffer(Buf^,stream.Size);//从流中当前位置读取流的大小  
      ClientSocket1.Socket.SendBuf(Buf^,stream.Size);//发送流的大小  
  end;  
   
  procedure   TForm1.ClientSocket1Error(Sender:   TObject;  
      Socket:   TCustomWinSocket;   ErrorEvent:   TErrorEvent;  
      var   ErrorCode:   Integer);  
  begin  
  ErrorCode   :=   0;  
  end;  
   
  procedure   TForm1.FormCreate(Sender:   TObject);  
  begin  
  StatusBar1.Align:=alBottom;  
  StatusBar1.SimplePanel   :=   True;  
  end;  
   
  end.  
   
   
  服务器端  
  unit   mail;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,   ScktComp,   ComCtrls;  
   
  type  
  TCon   =   record  
          FileName   :   String;  
          TotalSize   :   Integer;  
          Status   :   Integer;  
      end;  
   
      PCON   =   ^TCON;    
      TForm1   =   class(TForm)  
          ServerSocket1:   TServerSocket;  
          procedure   FormCreate(Sender:   TObject);  
          procedure   ServerSocket1ClientError(Sender:   TObject;  
              Socket:   TCustomWinSocket;   ErrorEvent:   TErrorEvent;  
              var   ErrorCode:   Integer);  
          procedure   ServerSocket1ClientConnect(Sender:   TObject;  
              Socket:   TCustomWinSocket);  
          procedure   ServerSocket1ClientRead(Sender:   TObject;  
              Socket:   TCustomWinSocket);  
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
      end;  
   
  var  
      Form1:   TForm1;  
   
  implementation  
   
  {$R   *.dfm}  
  var     Count   :   Integer;  
  procedure   TForm1.FormCreate(Sender:   TObject);  
  begin  
  Count   :=   0;  
  if   serversocket1.Active=false   then  
  begin  
  serversocket1.Port   :=   7890;   //端口  
  ServerSocket1.Open;   //Socket开始侦听  
  end;  
  end;  
   
  procedure   TForm1.ServerSocket1ClientError(Sender:   TObject;  
      Socket:   TCustomWinSocket;   ErrorEvent:   TErrorEvent;  
      var   ErrorCode:   Integer);  
  begin  
  ErrorCode   :=   0;  
  end;  
   
  procedure   TForm1.ServerSocket1ClientConnect(Sender:   TObject;  
      Socket:   TCustomWinSocket);  
  var   c   :   pcon;  
  begin  
      c   :=new(pcon);  
      c.FileName   :=   ;  
      c.TotalSize   :=     0   ;  
      c.Status   :=   0;  
      Socket.Data   :=   c;  
  end;  
   
  procedure   TForm1.ServerSocket1ClientRead(Sender:   TObject;  
      Socket:   TCustomWinSocket);  
  var   C   :   PCON;  
          cmd:String;  
          Buffer   :   pointer;  
          n   :   integer;  
          fs   :   TFileStream;  
  const   bufferSize   =     1024   ;  
   
  begin  
  C:=   Socket.Data   ;  
      case   c.Status   of  
        0   :  
        begin  
            cmd   :=   trim(Socket.ReceiveText)   ;  
            if     Pos(UPLOAD   ,uppercase(cmd))   >     0   then  
            begin  
                c.FileName   :=   trim(Copy(cmd,Pos(   ,cmd)+1,Length(cmd)));  
                c.TotalSize   :=   StrToInt(Copy(c.FileName,Pos(   ,c.FileName)+1,Length(c.FileName)));  
                c.FileName   :=   trim(Copy(c.FileName,1,Pos(   ,c.FileName)));  
                c.Status   :=   1;  
                Socket.Data   :=   C;  
            end;  
        end;  
        1   :  
        begin  
            Count   :=   count   +   1;     //发送的次数  
            GetMem(Buffer,BufferSize);   //建立一指定大小的动态变量,并将指针指向该处  
            n   :=   Socket.ReceiveBuf(Buffer^,BufferSize);//每次发送字节的大小     //接收数据包并读入缓冲区内  
            if   not   FIleExists(c:\+c.FileName)   then  
            begin  
            fs   :=TFileStream.Create(c:\+c.FileName,fmCreate   or   fmShareDenyNone);  
            fs.Seek(0,soFromBeginning);  
            end  
            else  
            begin  
                fs   :=TFileStream.Create(c:\+c.FileName,fmOpenWrite   or   fmShareDenyNone);  
                fs.Seek(0,soFromEnd);  
            end;  
            fs.WriteBuffer(Buffer^,n);  
            fs.Destroy;  
            FreeMem(Buffer);  
        end;  
      end;  
  end;  
   
  end.  
 

NO.1   作者: sunnauq

up,接分


    摘要: jsp+mysql写的程序从tomcat转到resin突然就不显示中文了 ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE