用流方式最简单 而且错误率很低很低
发送端先给接收端发个消息 令其准备接收文件
然后发送端再发送文件
发送端
testream:=tfilestream.Create(path1,fmOpenRead); //初始化流tempstream,在用sendstream(m1)发送流后,
//它将保留到socket对话结束,
//不用手工free掉
testream.Position:=0;
Socket.SendStream(testream); //发送文件
接收端
procedure TForm1.ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
leng : integer;
name_a,name_b :integer;
sign_tran_ser : char; //从服务端传过来的信息取第一个字符做标志
temp : string;
zip_source : tmemorystream;
zip_dest : tmemorystream;
begin
leng:=client.socket.ReceiveLength(); //读出包长度******此句为公共用代码
leng:=client.Socket.ReceiveBuf(buffer,leng); //接收数据包并读入缓冲区内
if rece_file=true then // 依靠发送端提前发送的消息定义其值 如果“是“ 则接收文件
begin
m.Write(buffer,leng); //追加入流M中
countfile_size:=countfile_size+leng;
//temp:=s2c_filesize;
if m.Size>=s2c_filesize then //如果流长度大于需接收的字节数,则接收完毕
begin
rece_file:=false;
m.Position:=0;
try
s2cstream:=TFileStream.Create(s2c_filename,fmCreate);
s2cstream.copyfrom(m,m.size)
finally
s2cstream.free;
m.free
end;
end;
end
。。其它非文件传输代码。。。。。。。