这是SERVER端的代码:procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
opendialog1.Filter:='*.*|*.*';
if opendialog1.Execute then
begin
filename:=opendialog1.FileName;
myfile:=tfilestream.Create(filename,fmopenread);
end;
end;procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
NMUDP1.RemoteHost:=edit1.text;
myfile.Position := 0;
NMUDP1.SendStream(myfile);
end;
begin
opendialog1.Filter:='*.*|*.*';
if opendialog1.Execute then
begin
filename:=opendialog1.FileName;
myfile:=tfilestream.Create(filename,fmopenread);
end;
end;procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
NMUDP1.RemoteHost:=edit1.text;
myfile.Position := 0;
NMUDP1.SendStream(myfile);
end;
NumberBytes: Integer; FromIP: String; Port: Integer);
var
vMemoryStream: TmemoryStream;
begin
vMemoryStream := TmemoryStream.Create;
try
NMUDP1.ReadStream(vMemoryStream);
vMemoryStream.Position := 0;
vMemoryStream.SaveToFile('c:\temp.dat');
finally
vMemoryStream.Free;
end;
end;
把文件分为定长的小块,给每小块编上号,
一个UDP报文传一小块,接收方把接收到的块按顺序拼接..同时,把未接收到的块发出重传请求.因为UDP是不可靠传输,必须采取一定措施控制.
2 接收时进行缓冲,防止因为时延大而丢包,缓冲的大小和你预计的时延成正比
3 如果是要求可靠的传输,还要加重发机制,这就要在包头中加包的类型编码,处理流程就很复杂了,可参看并模拟TCP的处理方法。