记录如下:
TUserInfo = packed record
  ID: array of Integer;
  Name: array of string;
end;

解决方案 »

  1.   

    希望下面的代码对你有所帮助:
    这是我做一个断点续传程序的服务断程序的服务端的部分代码。
      TMultiThread = class(TServerClientThread)
        constructor Create(CreateSuspended: Boolean; ASocket: TServerClientWinSocket);
        procedure ClientExecute;override;
        //destructor Destroy;override;
      end;  SegInfo = packed record  //信息
        RequstSendCommand:array[0..500] of char;//要求发送文件
        FileName : array[0..500] of Char;//文件名
        FileSize : int64;//文件大小
        FileSendComplete:array[0..500] of char;//发送完毕命令
      end;var
      frmServer: TfrmServer;
      hTempFile : THandle;
      CSocket : TServerClientWinSocket;
      objSegInfo : SegInfo;
      UserHost:String;
    implementation
    uses unt_Method;{$R *.DFM}{***************************************************************
     * 方 法 名  : TfrmServer.sskProvideServerGetThread
     * 编写目的   :
     * 作    者  : 黄仁光
     * 参    数  : Sender
                   ClientSocket
                   SocketThread
     * 结    果  : None
     * 编写日期   :2002年11月11日
     ****************************************************************}
    procedure TfrmServer.sskProvideServerGetThread(Sender: TObject;
      ClientSocket: TServerClientWinSocket;
      var SocketThread: TServerClientThread);
    begin
      CSocket:= ClientSocket;
      SocketThread:= TMultiThread.Create(false,ClientSocket);
    end;{***************************************************************
     * 方 法 名  : ClientExecute
     * 编写目的   : 处理与客户端的信息交流
     * 作    者  : 黄仁光
     * 参    数  : None
     * 结    果  : None
     * 编写日期   :2002年10月08日
     ****************************************************************}
    procedure TMultiThread.ClientExecute;
    var
      SktStream : TWinSocketStream;
      f: file of Byte;
      FileToSendName:String;
      CommandSend:String;//反馈消息
      SendFileSize:int64;//发送端实际发送的文件大小
    begin
      UserHost := CSocket.RemoteHost;
      FillChar(objSegInfo,sizeof(objSegInfo),0);
      SktStream:= TWinSocketStream.Create(CSocket,5000);
      if SktStream.WaitForData(8000) then
      begin
        SktStream.ReadBuffer(objSegInfo,sizeof(objSegInfo));
        //响上传应请求
        if StrPas(objSegInfo.RequstSendCommand) = '要求上传文件' then
        begin
          if Application.MessageBox(PChar('客户'+UserHost+'请求上传文件,同意吗?'),'客户请求',MB_OKCANCEL) = IDOK then
          begin
            CommandSend := '允许发送文件';
            StrPCopy(objSegInfo.RequstSendCommand,CommandSend);
          end
          else
          begin
            CommandSend := '不允许发送文件';
            StrPCopy(objSegInfo.RequstSendCommand,CommandSend);
          end
        end;
        //获取上传来的文件名
        if Trim(StrPas(objSegInfo.FileName)) <> '' then
        begin
          FileToSendName := StrPas(objSegInfo.FileName);
          frmServer.sbrInformation.Panels.Items[1].Text := ExtractFileName(StrPas(objSegInfo.FileName));
          AssignFile(f, GetFTPRoot+'\'+ExtractFileName(FileToSendName));
          try
            Reset(f);
          except
            Application.MessageBox('文件打开错误', '提示', MB_OK);
            SktStream.Free;
            exit;
          end;
          //判断是否接收完毕
          SendFileSize := objSegInfo.FileSize;//发送方所发送的文件大小,当发送方认为发送完毕时传送过来
          objSegInfo.FileSize:= FileSize(f);//FileSize(f)实际接收到的文件大小,续传和完毕时要用到
          if FileSize(f) = SendFileSize then
          begin
            StrPCopy(objSegInfo.FileSendComplete,'文件接收完毕');
            //objSegInfo.FileSendComplete := '文件接收完毕';
            frmServer.memInformation.Lines.Add('接收来自'+UserHost+'的文件完毕');
            frmServer.memInformation.Lines.Add('文件名为:'+ExtractFileName(FileToSendName));
            frmServer.memInformation.Lines.Add('文件大小为:'+IntToStr(SendFileSize));
          end
          else
          begin
            frmServer.memInformation.Lines.Add(UserHost+'准备续传文件');
            frmServer.memInformation.Lines.Add('续传的文件名为:'+ExtractFileName(FileToSendName));
          end;
          CloseFile(f);
        end;
        SktStream.WriteBuffer(objSegInfo,sizeof(objSegInfo));
        SktStream.Free;
      end;
    end;constructor TMultiThread.Create(CreateSuspended: Boolean; ASocket: TServerClientWinSocket);
    begin
      inherited;
      FreeOnTerminate:= true;
    end;