怎么样用IdUDPServer进行文件传输(100分)

  • 主题发起人 主题发起人 dali2000
  • 开始时间 开始时间
D

dali2000

Unregistered / Unconfirmed
GUEST, unregistred user!
发送:
procedure TForm_csrsy.Sendfile(filename:string);
var
FileStream: TFileStream;
begin
FileStream := TFileStream.Create(filename,fmOpenRead );
try
//FileStream.Position:=0;
IdUDPServer2.SendBuffer(remoteip1,7888,FileStream,FileStream.Size);
finally
FileStream.Free;
end;
end;

接收:
FileStream := TFileStream.Create(temppath+'ftmp.tmp', fmCreate);
try
//FileStream.Position:=0;
FileStream.CopyFrom(AData, AData.Size);
finally
FileStream.Free;
end;

运行结果不对,不能传输,应怎样用UDP进行传输文件,QQ是怎么实现的
 
怎么没人回答
 
procedure TForm1.Button1Click(Sender: TObject);
Var
sFileServer, sFileName : String;
iPos, iFileSize, iLen : Integer;
p : Array[0.._iMaxFileSize-1] Of Byte;
Mem : TFileStream;
IdUDPClient1 : TIdUDPClient;
begin
sFileServer := '127.0.0.1';
sFileName := Edit1.Texts;
If Not FileExists(sFileName) then
Begin
ShowMessage('指定的文件不存在');
Exit;
End;
//
IdUDPClient1 := TIdUDPClient.Create(Nil);
Try
IdUDPClient1.Active := False;
IdUDPClient1.Host := sFileServer;
IdUDPClient1.Port := 9999;
IdUDPClient1.ReceiveTimeout := 5000; //ms
IdUDPClient1.Active := True;
Except
IdUDPClient1.Free;
ShowMessage('连接文件服务器失败');
Exit;
End;
//
Mem := TFileStream.Create(sFileName, fmOpenRead);
Try
iPos := 0;
iFileSize := Mem.Size;
While iPos<iFileSize Do//一次只发4096个字节,字节数不能太多.
Begin
iLen := _iMaxFileSize;
If Mem.Size-iPos<_iMaxFileSize Then iLen := iFileSize-iPos;
Mem.Read(p, iLen);
IdUDPClient1.SendBuffer(P, iLen);
Inc(iPos, iLen);
Application.ProcessMessages;
End;
Except
Mem.Free;
End;
//
IdUDPClient1.Free;
Mem.Free;
end;
 
上面好象只是分割发送,接收呢
 
http://www.delphibbs.com/keylife/iblog_show.asp?xid=19752 是API不INDY原理一样呀
 
打包文件
可以分割合并文件
 
有没有代码
 
接收放在这个事件里
procedure TUDPMainForm.UDPServerUDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);
var
FileStream: TFileStream;
begin
........
FileStream.CopyFrom(AData, AData.Size);
 
xianguo的方法中是分割发送,接收到后又如何做呢
 
后退
顶部