5,388
社区成员
发帖
与我相关
我的任务
分享
procedure TForm1.Button1Click(Sender: TObject);
begin
if(OpenDialog1.Execute)then
begin
SendFileOnetime(OpenDialog1.FileName);
end;
end;
procedure TForm1.SendFileOnetime(FileName: string); //一次性发送文件
var trans:file of Byte;
FileLen:Integer;
Blockbuff:pointer;
socket:TCustomWinSocket;
begin
if(isServer) then socket:=ServerSocket1.Socket else socket:=ClientSocket1.Socket;
AssignFile(trans,filename);
Reset(trans);
FileLen:=FileSize(trans);
GetMem(Blockbuff,FileLen);
BlockRead(Trans,Blockbuff^,FileLen);
socket.SendBuf(Blockbuff^,FileLen);
FreeMem(Blockbuff);
end;
服务端接收数据:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; //服务端读取数据
Socket: TCustomWinSocket);
var recstr:string;
begin
ReceiveFile('c:\aa.mp3',Socket);
RecCount:=RecCount+1;
Label1.Caption:=IntToStr(RecCount);
end;
function TForm1.ReceiveFile(FileName: string;socket:TCustomWinSocket): Boolean; //接收文件
var
Trans:file of Byte;
Blockbuff:array[0..BlockLen-1] of Byte; //字节数组
FileLen:Integer; //字节总数
RemainLen:Integer; //剩余字节数
i:Integer;
ReceiveLen:Integer;
begin
AssignFile(Trans,FileName);
Rewrite(Trans);
FileLen:=FileSize(Trans);
ProgressBar1.Min:=0;
ProgressBar1.Max:=socket.ReceiveLength;
ReceiveLen:=socket.ReceiveBuf(Blockbuff,BlockLen);
ProgressBar1.Position:= ProgressBar1.Position+ReceiveLen;
if(ReceiveLen=BlockLen)then
begin
while(ReceiveLen>0)do
begin
i:=i+ReceiveLen;
BlockWrite(Trans,Blockbuff[0],ReceiveLen); //写数据
ReceiveLen:=socket.ReceiveBuf(Blockbuff,BlockLen); //继续接收
ProgressBar1.Position:= ProgressBar1.Position+ReceiveLen;
end;
end;
CloseFile(Trans);
//ShowMessage(Format('接收文件大小%d字节--%dMB',[i,((i div 1024) div 1024)]));
//ShowMessage('文件传输成功!');
end;