我的程序错在哪了?

sDuma 2003-04-19 08:23:23
以下是文件接收程序:


procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
FileSize:integer;
Mbuffer:array[0..10000] of byte;
Myfile:longint;
FStream:Tmemorystream;
begin
FileSize:=0;
try
Fstream:=TmemoryStream.Create;
FileSize:=strtoint(socket.ReceiveText);
if (FileSize<>0) and (SaveDialog1.Execute) then FilePath:=SaveDialog1.FileName;
Socket.SendText('1');
showmessage('传过来的文件大小:'+inttostr(round(FileSize/1024))+'kb。');
Socket.ReceiveBuf(Mbuffer,Socket.ReceiveLength);
Fstream.Write(Mbuffer,socket.ReceiveLength);
If fstream.Size >= Filesize then
begin
Fstream.SaveToFile(FilePath);
end;
finally
fstream.Free;
Fstream.Clear;
end;
end;
...全文
28 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
badDuck 2003-04-19
  • 打赏
  • 举报
回复
如果你发的文件大一些比如1MB,就会触发多次onread事件,你每次都建立fstream,这样写入文件时你更本不能得到想要的结果.
还有比如像你这样,一端用文件流打开一个文件,然后循环发指定字节的流到服务器(客户端),delphi只能保证每次数据的完整,而不会自己收集数据并返回给用户.所以你要自己定义一个协议收集数据.关于咋定,有很多方法了.自己想想吧


FrameSniper 2003-04-19
  • 打赏
  • 举报
回复
不知道

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧