程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 用Delphi編寫點對點傳文件程序(2)

用Delphi編寫點對點傳文件程序(2)

編輯:Delphi
end;
  end;
  
  cs.OnRead(Sender: TObject;Socket: TCustomWinSocket);
  var
  sTemp:string;
  bufSend:pointer;
  begin
  sRecv:=Socket.ReceiveText;
  Case sRecv[1] of
  MP_REFUSE:ShowMessage('Faint,be refused!');
  MP_ACCEPT:begin
  fsSend:=TFileStream.Create(OpenDialog1.FileName,fmOpen);
  //iBYTEPERSEND是個常量,每次發送包的大小。
  Socket.SendText(MP_FILEPROPERTY+Trunc(fsSend.Size/iBYTEPERSEND)+1);
  end;
  MP_NEXTWILLBEDATA:begin
  Socket.SendText(MP_NEXTWILLBEDATA);
  end;
  MP_DATA:begin
  try
  GetMem(bufSend,iBYTEPERSEND+1);
  if (fsSend.Position+1+iBYTEPERSEND) < fsSend.Size then
  begin
  fsSend.Read(bufSend^,iBYTEPERSEND);
  Socket.SendBuf(bufSend^,iBYTEPERSEND);
  fsSend.Free;
  end//普通的發送,大小為iBYTEPERSEND
  else begin
  fsSend.Read(bufSend^,fsSend.Size-fsSend.Position-1);
  Socket.SendBuf(bufSend^,fsSend.Size-fsSend.Position-1);
  end;//最後一次發送,發送剩余的數據
  finally
  FreeMem(bufSend,iBYTEPERSEND+1);
  end;{of try}
  end;
  MP_ABORT:begin
  //被取消了:(
  fsSend.Free;
  end;
  end;{of case}
  end;
  
  
  整理程序:
  加入錯誤判斷,優化程序,把Server和ClIEnt聯合在一起,加入剩余時間進度顯示,做成能一次傳多個文件,加入聊天功能,就成了一個很好的點對點傳文件的程序。
  
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved