以下是文件接收程序:
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;
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;
还有比如像你这样,一端用文件流打开一个文件,然后循环发指定字节的流到服务器(客户端),delphi只能保证每次数据的完整,而不会自己收集数据并返回给用户.所以你要自己定义一个协议收集数据.关于咋定,有很多方法了.自己想想吧