我认为可以从以下方面来着手:
1,写一个服务器程序和客户端程序,在服务器程序上添加以下组件ServerSocket,NMStrm,NMStrm的timeout
属性设为9000,port设为8800(可以任意但和客户端NMStrmServ的port相同 ),
在客户端程序上添加以下组件:ClientSocket,NMStrmServ
ServerSocket用来监听客户端发来的请求,当然,它的port属性的设置因该和客户端ClientSocket的port一样
否则服务器和客户端不能正确的握手,NMStrm,NMStrmServ,分别用来接受和发送文件,当然它是以流的方式接受和发送.2,下面,我给出代码,当然是核心部分:
先给出服务器的:
procedure TForm1.FormCreate(Sender: TObject);//这是监听来自客户端的请求.
begin
serversocket1.Open;
serversocket1.Active:=true;
serversocket1.Socket.Lock;
end;procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);//获取客户端的ip
begin
  edit1.Text:=socket.RemoteAddress ;
end;procedure TForm1.serversocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var fromclient:string;
sendfile:string;
begin
 fromclient:=socket.ReceiveText ;//接受来自客户端的消息
 sendfile:=copy(fronclient,6,length(fromclient)-5);//要传送的文件
  if pos('down!',fromclient)=1 then//判断是否是传送文件指令
  Begin
    NMStrm1.Host := Edit1.Text;
    NMStrm1.FromName := 'NetMasterstr';;
    MyFStream := TFileStream.Create(strfile, fmOpenRead);
    try
        serversocket1.Active:=false;
        NMStrm1.PostIt(MyFStream);
      finally
        MyFStream.Free;
      end;
        serversocket1.Active:=true;
  end;end;客户端:为了和服务器连接
如下代码加在buttonclick事件中
procedure TForm1.Button1Click(Sender: TObject);
begin
clientsocket1.Address:=combobox1.Text ;//服务器的ip
 clientsocket1.Active:=true;
 clientsocket1.Port:=strtoint(edit1.Text );//服务器监听端口
end;procedure TForm1.BitBtn52Click(Sender: TObject);//发送下载文件请求
begin
 clientsocket1.Socket.sendtext('down!'+edit9.Text);//edit9.txt中存放要下载的文件,将数据库中的地址读入edit9.txt我想不是难题,如edit9.txt:='d:\eeee.txt'
end;procedure TForm1.NMStrmServ1MSG(Sender: TComponent; const sFrom: String;//客户端接受服务器传来的文件
  strm: TStream);
var
 myfstream :Tfilestream  ;
 begin
  If FileExists(edit10.Text) then DeleteFile(edit10.text);//edit10.text 是你下载到你的计算机上之后保存的文件名如'c:\xxxx.exe'
  MyFStream := TFileStream.Create(edit10.text, fmCreate);
  try
    MyFStream.CopyFrom(strm, strm.size);
  finally
    MYFStream.Free;
  end;
 clientsocket1.Address:=combobox1.Text ;//服务器的ip
 clientsocket1.Active:=true;
 clientsocket1.Port:=strtoint(edit1.Text );//和服务器的端口相同
  messagebox(handle,'下载完成','case',MB_ok+MB_iconstop); 
 end;当然我设计的是将自己机器作为客户机,而远程的作为服务器,其实,那一个作为服务器不重要,最重要的是方法
你也可以将自己作为服务器,原理一样.如有问题请继续问!