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

📄 telnetsrvmain.pas

📁 Socket控件服务器端Delphi演示程序源码.rar
💻 PAS
字号:
unit telnetsrvmain;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Sockets, ScktComp, ComCtrls;

type
  TMainForm = class(TForm)
    buttonExit: TButton;
    Memo1: TMemo;
    ServerSocket1: TServerSocket;
    Button1: TButton;
    StatusBar1: TStatusBar;
    Button2: TButton;
    Button3: TButton;
    ComboBox1: TComboBox;
    procedure buttonExitClick(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure FormCreate(Sender: TObject);
    procedure ServerSocket1ClientError(Sender: TObject;
      Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
      var ErrorCode: Integer);
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure Button1Click(Sender: TObject);
    procedure ServerSocket1ClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocket1ClientDisconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure ServerSocket1Listen(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocket1GetSocket(Sender: TObject; Socket: Integer;
      var ClientSocket: TServerClientWinSocket);
    procedure ServerSocket1ClientWrite(Sender: TObject;
      Socket: TCustomWinSocket);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;
  CommStart: Bool;
implementation

{$R *.DFM}


procedure TMainForm.buttonExitClick(Sender: TObject);
begin
  if ServerSocket1.Active then
  begin
    ServerSocket1.Active := False;
  end;
  Application.Terminate;
end;

procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
 if ServerSocket1.Active then
 begin
   ServerSocket1.Active := False;
 end;
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
  ServerSocket1.Active := False;
  ServerSocket1.ServerType := stNonBlocking;
  CommStart := False;
  StatusBar1.Panels[0].Text := '网络未链接';
end;

procedure TMainForm.ServerSocket1ClientError(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
  StatusBar1.Panels[0].Text := '与客户端 '+ Socket.RemoteAddress + ':' + inttoStr(ServerSocket1.Port) + '链接发生错误';
  ErrorCode := 0;
end;

procedure TMainForm.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  i: Integer;
  Str, CommStr, DataStr: String;
begin
  Str := Socket.ReceiveText;
  Memo1.Lines.Add(Str);
  i := Pos(' ', Str);
  if i = 0 then//只接收服务器端命令
  begin
    CommStr := Str;
    DataStr := '';
    if CommStr = 'REQUEST' then//客户端请求发送数据包
    begin
      CommStart := True;
      Socket.SendText('USER');//服务器要求客户端传送用户名
    end
    else if CommStr = 'DISCONNECT' then//客户端通知本次传送结束
    begin

    end;
  end
  else
  begin//接收服务器端命令及收据
    CommStr := Copy(Str, 1, i - 1);
    DataStr := Copy(Str, i + 1, Length(Str) - i);
    if CommStr = 'USER' then//服务器接收客户端传送用户名
    begin
      if DataStr = 'HotPower' then
      begin
        if CommStart then
          Socket.SendText('PASSWORD');//服务器要求客户端传送密码
      end
      else
      begin
        Socket.SendText('REJECT');//服务器接收客户端传送非法数据
      end;
    end
    else if CommStr = 'PASSWORD' then//服务器接收客户端传送密码
    begin
      if DataStr = 'HotPower@126.com' then
      begin
        if CommStart then
          Socket.SendText('TRANS');//服务器允许客户端传送数据
      end
      else
      begin
        Socket.SendText('REJECT');//服务器接收客户端传送非法数据
      end;
    end
    else if (CommStr = 'BATTDATA') then//服务器接收客户端传送数据
    begin
      if DataStr > '' then//
      begin
        if CommStart then
          Socket.SendText('SUCCESS');//服务器接收客户端传送数据成功
      end
      else
      begin
        Socket.SendText('FAILED');//服务器接收客户端传送数据失败
      end;
    end;
  end;
end;

procedure TMainForm.Button1Click(Sender: TObject);
begin
  if ServerSocket1.Socket.ActiveConnections > 0 then
  begin
    if Trim(ComboBox1.Text) > '' then
    begin
      ServerSocket1.Socket.Connections[0].SendText(ComboBox1.Text);
    end;
  end;
end;

procedure TMainForm.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  StatusBar1.Panels[0].Text := '客户端 '+ Socket.RemoteAddress + ':' + inttoStr(ServerSocket1.Port) + ' 已经链接';
end;

procedure TMainForm.ServerSocket1ClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  StatusBar1.Panels[0].Text := '客户端 '+ Socket.RemoteAddress + ':' + inttoStr(ServerSocket1.Port) + ' 已经断开';
end;

procedure TMainForm.Button2Click(Sender: TObject);
begin
  ServerSocket1.Active := True;
end;

procedure TMainForm.Button3Click(Sender: TObject);
begin
  ServerSocket1.Active := False;
  StatusBar1.Panels[0].Text := '';
  CommStart := False;
end;

procedure TMainForm.ServerSocket1Listen(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  StatusBar1.Panels[0].Text :='等待客户端链接...';
  CommStart := False;
end;

procedure TMainForm.ServerSocket1GetSocket(Sender: TObject;
  Socket: Integer; var ClientSocket: TServerClientWinSocket);
begin
  StatusBar1.Panels[0].Text := '客户端正在链接...';
  CommStart := False;
end;

procedure TMainForm.ServerSocket1ClientWrite(Sender: TObject;
  Socket: TCustomWinSocket);
begin
{
  Write事件可以做为链接成功的可靠依据!!!
}
  StatusBar1.Panels[0].Text := '客户端链接成功!!!按发送键主机发送命令';
  CommStart := False;
end;

end.

⌨️ 快捷键说明

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