文件传输问题(200)

  • 主题发起人 主题发起人 yuqiu0527
  • 开始时间 开始时间
Y

yuqiu0527

Unregistered / Unconfirmed
GUEST, unregistred user!
我用IdTCPClient 进行 文件传输var cmd,tmpfn,msg,targetname,localdir,com:string; lsize:int64; fs:tfilestream; filename:pchar; sign,i:integer; ldir:stringarray; lSavePath,Savedir:String; try with athread.Connection do begin cmd:=trim(readln); if cmd='TRANSFILE'then begin GetMem(filename,255); zeromemory(filename,255); tmpfn:=readln; Move(tmpfn[1],filename^,length(tmpfn)); sendmessage(ufrmSendFiles.Handle,WM_USER+100,integer(filename),0); writeln('BEGIN'); lsize:=strtointdef(readln,0); if lsize=0 then begin disconnect; exit; end; fs:=TFileStream.Create(filename,fmcreate); readstream(fs,lsize); fs.Free; end; if cmd='TRANSDIR'then //接收文件夹信号 begin if selectdirectory('保存文件夹','我的电脑',Savedir)=true then begin if trim(copy(Savedir,length(Savedir),1))<>'/' then Savedir:=Savedir+'/'; GetMem(localroot,255); zeromemory(localroot,255); move(Savedir[1],localroot^,length(Savedir)); writeln('TRUE'); end else writeln('FALSE'); end; if cmd='START'then begin msg:=readln(); //接收文件名 ldir:=split(msg,'/'); localdir:=strpas(localroot); for i:=0 to high(ldir)-1 do begin localdir:=localdir+ldir+'/'; if not directoryexists(localdir) then createdir(localdir); //创建接收到的文件夹下边的文件夹 end; targetname:=strpas(localroot)+msg; //本地文件名 writeln('BEGIN'); //发送开始信号 lsize:=strtointdef(readln,0); //接收文件大小 if lsize=0 then begin disconnect; exit; end; fs:=TFileStream.Create(targetname,fmcreate); readstream(fs,lsize); fs.Free; end; // end; except /// end;end;/@为什么 只能传 文本文件 word与图片传完后打不开 请赐教
 
话说,别人传文件都用UDP的吧。。用IDUDP看看,实在不行,换ICS看看另外,你发送和接收的代码最好分开写,这样方便调试
 
readln 的参数是string 。拜托,如果要接收word和图片,应该使用readbuffer 还要先读取接收字节数,或者你已经知道文件大小。用readln没有问题。默认遇到/r/n就结束了。readbuffer可不会,我是先用 readfromstock 获取已经传输文件大小。再readbuffer希望对你有帮助。
 
晕,代码都没发全,你看看是不是发送方的问题
 

Similar threads

S
回复
0
查看
688
SUNSTONE的Delphi笔记
S
S
回复
0
查看
683
SUNSTONE的Delphi笔记
S
S
回复
0
查看
896
SUNSTONE的Delphi笔记
S
S
回复
0
查看
873
SUNSTONE的Delphi笔记
S
后退
顶部