繁体   English   中英

使用客户端/服务器 sockets 的网吧经理

[英]cybercafe manager using client/server sockets

我有动态组件破坏的问题。 我想在连接时创建一个 pc 的图像,我做到了,但是当客户端断开连接时我无法破坏选定的图像组件。

我尝试使用 object sender ,但它不适用于我。 你能提供更好的代码吗?

服务器

unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ScktComp;
type
  TForm1 = class(TForm)
    Button1: TButton;
    Panel1: TPanel;
    Button2: TButton;
    Edit1: TEdit;
    ClientSocket1: TClientSocket;
    Memo1: TMemo;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
  private
    { Private declarations }
  public
    procedure getname(sender:Tobject);
    { Public declarations }
  end;
var
  Form1: TForm1;
  pcname:string;
  j,k:integer;
  IP11:TImage;
implementation
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  j:=0;
  k:=0;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  lab:Tlabel;
begin
  if   (j <800) then
  begin
    IP11:=TImage.Create(panel1);
    IP11.Parent:=panel1;
    IP11.Picture.Bitmap.LoadFromFile('PPoste.Bmp');
    IP11.Top:=20+k; IP11.Left:=(48+j);
    IP11.Name:=pcname;
    lab:=Tlabel.Create(IP11);
    lab.Parent:=panel1;
    lab.Caption:=pcname;
    lab.Font.Size:=18;
    lab.Font.Color:=clred;
    lab.Color:=clwhite;
    lab.Transparent:=true;
    lab.Top:=100+k; lab.Left:=(48+j);
    lab.Name:=pcname;
    j:=j+120;
  end else
  begin
    k:=k+120;
    j:=0;
    Button1.Click;
  end ;
  IP11.OnClick:=getname;
end;

procedure TForm1.getname(sender: Tobject);
begin
  form1.Caption:=((sender as Timage).Name);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  clientsocket1.Address:=edit1.Text;
  clientsocket1.Active:=true;
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  memo1.Lines.Add(socket.RemoteAddress);
  memo1.Lines.Add(socket.RemoteHost);
  memo1.Lines.Add(socket.LocalHost);
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var
  a:integer;
  pc : string;
begin
  edit2.Text:=socket.ReceiveText;
  sleep(20);
  a:=pos ( '/', edit2.Text );
  pcname:=copy(edit2.Text,0,a-1);
  pc:=copy(edit2.Text,a+1,a+1);
  if (pc='c') then
    button1.Click;
  if (pc='d') then
  begin
    if IP11.Name=pcname then
      IP11.Free;
    j:=j-120;
  end;
end;

end.

客户端

我使用 button3&4&5&6 来模拟与其他客户端的连接和断开连接

unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ScktComp;
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    Edit1: TEdit;
    ServerSocket1: TServerSocket;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ServerSocket1Listen(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocket1ClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure FormDestroy(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
  ip:string;

implementation
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  close;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if not (edit1.Text = '') then
  begin
    ip:=edit1.Text;
    form1.Hide;
    memo1.Text:=edit1.Text;
    memo1.Lines.SaveToFile('d:/key.txt');
  end
  else
    showmessage('enter ip');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  serversocket1.Active:=true;
  if fileexists('d:/key.txt') then
  begin
    form1.Hide;
  end;
end;

procedure TForm1.ServerSocket1Listen(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  form1.Caption:='listen';
end;

procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  form1.Caption:='conected';
  edit1.Text:=socket.LocalHost;
  serversocket1.Socket.Connections[0].SendText(edit1.text+'/c');
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  edit1.Text:=serversocket1.socket.LocalHost;
  serversocket1.Socket.Connections[0].SendText(edit1.text+'/d');
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  serversocket1.Socket.Connections[0].SendText('hakim/c');
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  serversocket1.Socket.Connections[0].SendText('hakim/d');
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
  serversocket1.Socket.Connections[0].SendText('taha/c');
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
  serversocket1.Socket.Connections[0].SendText('taha/d');
end;

end.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM