⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cs.pas

📁 Socket.ReceiveText Socket.ReceiveText
💻 PAS
字号:
unit cs;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ScktComp, ExtCtrls;
  Const 
MP_QUERY ='11111'; 
MP_REFUSE ='22222'; 
MP_ACCEPT ='33333'; 
MP_NEXTWILLBEDATA='44444'; 
MP_DATA ='55555'; 
MP_ABORT ='66666'; 
MP_OVER ='77777'; 
MP_CHAT ='88888'; 
MP_END='99999'; 
MP_FILEPROPERTY='00000'; 
iBYTEPERSEND=1024; 

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    cs: TClientSocket;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
  //  procedure Button2Click(Sender: TObject);
    procedure csRead(Sender: TObject; Socket: TCustomWinSocket);
    procedure FormCreate(Sender: TObject);
    procedure csConnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure csDisconnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure csError(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
  //  procedure csConnect(Sender: TObject; Socket: TCustomWinSocket);
  private
    { Private declarations }
    fsSend: TFileStream;
bStart:Boolean;
TickCount:Longword;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin 
if OpenDialog1.Execute then 
Begin 
cs.Socket.SendText(MP_QUERY+OpenDialog1.FileName);
memo1.Lines.Add(MP_QUERY+OpenDialog1.FileName);

   //query询问
//接收端是否准备好! 
end;
end; 



procedure TForm1.csRead(Sender: TObject; Socket: TCustomWinSocket);
var 
sRecv:string; 
bufSend:pointer; 
iLength:Integer; 
begin
sRecv:=Socket.ReceiveText; 
sRecv:=copy(sRecv,1,5);
if sRecv=MP_REFUSE then 
memo1.Lines.Add('被拒绝!')
else if sRecv=MP_ACCEPT then 
begin
fsSend:=TFileStream.Create(OpenDialog1.FileName,fmOpenRead);
bStart:=False; 
memo1.Lines.Add('开始发送!'); 
TickCount:=GetTickCount; 
//iBYTEPERSEND是个常量,每次发送包的大小。 
Socket.SendText(MP_FILEPROPERTY+inttostr(Trunc(fsSend.Size/iBYTEPERSEND)+1)); 
//创建文件流并发送文件长度。 特性
end else if sRecv=MP_NEXTWILLBEDATA then 
begin 
Socket.SendText(MP_NEXTWILLBEDATA); 
//通知接收端。继续传送数据。 
end else if sRecv=MP_DATA then 
begin
//发送数据。 
if not bStart then 
begin 
memo1.Lines.Add('发送数据。。。!');
bStart:=True; 
end; 
if fsSend.Position< fsSend.Size-1 then//还有数据没有发送。 
begin 
iLength:=fsSend.Size-1-fsSend.Position; 
if iLength>iBYTEPERSEND then 
iLength:=iBYTEPERSEND; 
GetMem(bufSend,iLength+1); 
try 
fsSend.Read(bufSend^,iLength); 
Socket.SendBuf(bufSend^,iLength); 
finally 
FreeMem(bufSend,iLength+1); 
end;{of try} 
end else//没有数据需要发送了。 
begin 
Socket.SendText(MP_END);//文件传送结束。 
memo1.Lines.Add('结束!'+IntToStr(GetTickCount-TickCount));
fsSend.Free; // <-------------------- 
end; 
end else if sRecv=MP_ABORT then 
begin 
memo1.Lines.Add('中止!');
//被取消了:( 
fsSend.Free; 
end; 
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  cs.Host :='127.0.0.1';
cs.Port:=2000;
cs.Open; 

  Memo1.Clear;
   memo1.Lines.Add('no连接!');
  // button1.Enabled  :=false;
end;

procedure TForm1.csConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
 memo1.Lines.Add('已连上!');
  //button1.Enabled  :=true;
end;

procedure TForm1.csDisconnect(Sender: TObject; Socket: TCustomWinSocket);
begin
memo1.Lines.Add('对方断开!');
   //  button1.Enabled  :=false;
end;

procedure TForm1.csError(Sender: TObject; Socket: TCustomWinSocket;
  ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
  ErrorCode:=0;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -