这是我一个接收文件的程序段,你参考一下。
procedure TSaveFileThread.Execute;
const
  BlockLen = 1024 * 4;
var
  RecvSocket: TSocket;  //用来接收文件的套接字
  SockAddr: SockAddr_IN;
  iSockAddrLen: integer;
  RecvFile: file of byte;
  BlockBuf: array [0 .. BlockLen - 1] of byte;
  iRecvLen: integer;
begin
  iSockAddrLen := SizeOf(SockAddr);
  //调用Accept函数来接受客户端的请求
  RecvSocket := Accept(ServerSocket, @SockAddr, @iSockAddrLen);
  if RecvSocket = INVALID_SOCKET then
    raise Exception.Create('接受客户端请求时发生错误!');  //建立文件
  AssignFile(RecvFile, FFileName);
  ReWrite(RecvFile);
  ServerMainForm.FStopTrans := false;
  ServerMainForm.FTransing := true;  //开始数据的读取
  ServerMainForm.StatusBar.SimpleText := '正在接受文件...';
  iRecvLen := Recv(RecvSocket, BlockBuf, BlockLen, 0);
  while (iRecvLen > 0) and (not ServerMainForm.FStopTrans) do
  begin
    BlockWrite(RecvFile, BlockBuf[0], iRecvLen);
    Application.ProcessMessages;
    iRecvLen := Recv(RecvSocket, BlockBuf, BlockLen, 0);
  end;  //收尾工作
  CloseFile(RecvFile);
  CloseSocket(RecvSocket);
  ServerMainForm.StatusBar.SimpleText := '';
  ServerMainForm.FTransing := false;
  ServerMainForm.btnReceive.Enabled := true;
  ServerMainForm.btnStop.Enabled := false;
  if iRecvLen = SOCKET_ERROR then
    raise Exception.Create('接收过程中发生错误!')
  else
    ShowMessage('文件接收完毕!');
end;