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

📄 servermain.~pas

📁 一个检测网络信息的程序.
💻 ~PAS
📖 第 1 页 / 共 2 页
字号:
unit servermain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, SUIForm, SUIImagePanel, SUIGroupBox, StdCtrls, SUIMemo,
  SUIButton, ScktComp, ComCtrls, SUITabControl, SUIPageControl, SUIEdit,
  AutoUpgrader, SUIProgressBar, XPMenu, Menus,registry,StrUtils,aniform;

const
   CMax=50; //客户端最大连接数
type
   client_record=record
   CHandle: integer; //客户端套接字句柄
   CSocket:TCustomWinSocket; //客户端套接字
   CName:string; //客户端计算机名称
   CAddress:string; //客户端计算机IP地址
   CUsed: boolean; //客户端联机标志
end;

type
  TForm1 = class(TForm)
    suiForm1: TsuiForm;
    suiButton1: TsuiButton;
    suiButton2: TsuiButton;
    suiButton3: TsuiButton;
    suiButton4: TsuiButton;
    ServerSocket1: TServerSocket;
    suiButton5: TsuiButton;
    suiButton6: TsuiButton;
    suiPageControl1: TsuiPageControl;
    suiTabSheet1: TsuiTabSheet;
    suiTabSheet2: TsuiTabSheet;
    suiGroupBox1: TsuiGroupBox;
    suiMemo1: TsuiMemo;
    StatusBar1: TStatusBar;
    suiGroupBox2: TsuiGroupBox;
    suiGroupBox3: TsuiGroupBox;
    suiGroupBox4: TsuiGroupBox;
    suiGroupBox5: TsuiGroupBox;
    suiCheckBox1: TsuiCheckBox;
    suiCheckBox2: TsuiCheckBox;
    suiCheckBox3: TsuiCheckBox;
    AutoUpgrader: TAutoUpgrader;
    Label6: TLabel;
    suiProgressBar1: TsuiProgressBar;
    suiButton9: TsuiButton;
    suiEdit1: TsuiEdit;
    suiCheckBox4: TsuiCheckBox;
    procedure suiButton1Click(Sender: TObject);
    procedure suiButton2Click(Sender: TObject);
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocket1ClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocket1Listen(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocket1ClientDisconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure FormCreate(Sender: TObject);
    procedure suiButton4Click(Sender: TObject);
    procedure ServerSocket1GetSocket(Sender: TObject; Socket: Integer;
      var ClientSocket: TServerClientWinSocket);
    procedure ServerSocket1ClientError(Sender: TObject;
      Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
      var ErrorCode: Integer);
    procedure suiMemo1DblClick(Sender: TObject);
    procedure suiButton5Click(Sender: TObject);
    procedure suiButton6Click(Sender: TObject);
    procedure AutoUpgraderError(Sender: TObject);
    procedure AutoUpgraderDone(Sender: TObject; FileSize: Integer);
    procedure AutoUpgraderNoUpdateAvailable(Sender: TObject);
    procedure AutoUpgraderProgress(Sender: TObject; TotalSize, ReadSize,
      ReadPercents: Integer);
    procedure AutoUpgraderUpgrade(Sender: TObject; UsersServed: Integer;
      var ShowMessageBox, CanUpgrade: Boolean);
    procedure suiButton9Click(Sender: TObject);
    procedure N1Click(Sender: TObject);
    procedure N4Click(Sender: TObject);
    procedure suiCheckBox1Click(Sender: TObject);
    procedure suiCheckBox3Click(Sender: TObject);
    procedure suiCheckBox2Click(Sender: TObject);
    procedure suiEdit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure suiCheckBox4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    session: array[0..CMax] of client_record; //客户端连接数组
    Sessions: integer; //客户端连接数
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.suiButton1Click(Sender: TObject);
begin
   suibutton1.Enabled :=false;
   suibutton2.Enabled :=true;
   serversocket1.Open ;
   StatusBar1.SimpleText :='      服务器已经开始工作。 监听端口:'+inttostr(serversocket1.Port)+'  最大可连接:'+inttostr(serversocket1.ThreadCacheSize )+'台客户端。';
end;

procedure TForm1.suiButton2Click(Sender: TObject);
begin
   suibutton1.Enabled :=true;
   suibutton2.Enabled :=false;
   serversocket1.Close ;
   dec(sessions);
   StatusBar1.SimpleText :='      服务器已经关闭,不接受客户端的连接请求。';
end;

//从客户端读取信息
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
   i:integer;
begin
   //将从客户端读取的信息添加到Memo1中
   suiMemo1.Lines .Add('记录时间:'+DateTimeToStr(Now)+' 在客户机:'+socket.RemoteHost +' 上:'+socket.ReceiveText );
   if suicheckbox2.Checked then
      suimemo1.Lines.SaveToFile(suiedit1.Text );
   for i:=0 to sessions do
   begin
      //取得匹配的客户端
      if session[i].CHandle = Socket.SocketHandle then
      begin
         session[i].CSocket.SendText('回复客户端:'+session[i].CAddress+' ==> '+'服务器已记录你刚才的限制性操作!');
      end;
   end;
   if suicheckbox4.Checked then
   begin
      if not form2.Showing then
      begin
         form2.Show ;
         form2.BringToFront ;
      end;
   end
   else
      if form2.Showing then form2.Hide ;
end;

//当客户端连接到服务器端以后
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
var
  i,j:integer;
begin
   j:=-1;
   for i:=0 to sessions do
   begin
      //在原有的客户端连接数组中有中断的客户端连接
      if not session[i].CUsed then
      begin
         session[i].CHandle := Socket.SocketHandle ;//客户端套接字句柄
         session[i].CSocket := Socket; //客户端套接字
         session[i].CName := Socket.RemoteHost ; //客户端计算机名称
         session[i].CAddress := Socket.RemoteAddress ;//客户端计算机IP
         session[i].CUsed := True; //连接数组当前位置已经占用
         Break;
      end;
      j:=i;
   end;
   if j=sessions then
   begin
      inc(sessions);
      session[j].CHandle := Socket.SocketHandle ;
      session[j].CSocket := Socket;
      session[j].CName := Socket.RemoteHost ;
      session[j].CAddress := Socket.RemoteAddress ;
      session[j].CUsed := True;
   end;
   suimemo1.Lines.Add( '客户端: '+Socket.RemoteHost + ' (其IP地址为:'+socket.RemoteAddress +') 已经连接');
   StatusBar1.SimpleText := '    客户端: '+Socket.RemoteHost + ' (其IP地址为:'+socket.RemoteAddress +') 已经连接。'+'当前连接数:'+inttostr(sessions+1)+' 台。';
end;

//服务器端套接字进入监听状态,以便监听客户端的连接
procedure TForm1.ServerSocket1Listen(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  statusbar1.SimpleText :='   等待客户端连接...';
end;

//当客户端断开连接时
procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
var
   i:integer;
begin
   for i:=0 to sessions do
   begin
      if session[i].CHandle =Socket.SocketHandle then
      begin
         session[i].CHandle :=0;
         session[i].CUsed := False;
         Break;
      end;
   end;
   suimemo1.Lines.Add('客户端: '+Socket.RemoteHost + ' (其IP地址为:'+socket.RemoteAddress +') 已经断开');
   StatusBar1.SimpleText :='客户端: '+Socket.RemoteHost + ' (其IP地址为:'+socket.RemoteAddress +') 已经断开。 当前连接数:'+inttostr(sessions)+'台。';
   
end;

procedure TForm1.FormCreate(Sender: TObject);
var
   reg:Tregistry;
begin
   sessions := 0;
   serversocket1.ThreadCacheSize :=CMAX;
   serversocket1.Port:=10240;
   serversocket1.Open ;
   StatusBar1.SimpleText :='      服务器已经开始工作。 监听端口:'+inttostr(serversocket1.Port)+'  最大可连接:'+inttostr(serversocket1.ThreadCacheSize )+'台客户端。';
   suiButton1.Enabled :=false;
   suibutton2.Enabled :=true;

   //SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
   application.Title :='《网吧哨兵》局域网监控器服务器端';
   //application.ShowMainForm :=false;

   reg:=tregistry.Create ;
   reg.RootKey :=HKEY_LOCAL_MACHINE;
   if reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run',false) then
   begin
      if reg.ValueExists('网吧哨兵服务器') then
         suicheckbox1.Checked :=true
      else
         suicheckbox1.Checked :=false;
      reg.CloseKey ;
   end;

   reg.RootKey := HKEY_CURRENT_USER;
   if reg.OpenKey('\Software\netguard\autoupdate',false) then
   begin
      if reg.ValueExists('autoupdate') then
      begin
         if reg.ReadString('autoupdate')='1' then
         begin
            suicheckbox3.Checked :=true;
            autoupgrader.Active :=true;
         end
         else
         begin
            suicheckbox3.Checked :=false;
            autoupgrader.Active :=false;
         end;
      end
      else
      begin
         suicheckbox3.Checked :=false;
         autoupgrader.Active :=false;
      end;
      reg.CloseKey ;
   end;

   if reg.OpenKey('\Software\netguard\autosave',false) then
   begin
      if reg.ValueExists('autosave') then
      begin
         if reg.ReadString('autosave')='1' then
         begin
            suicheckbox2.Checked :=true;
            suiedit1.Enabled :=true;
            if reg.ValueExists('savefile') then
               suiedit1.Text :=reg.ReadString('savefile')
            else
               suiedit1.Text :='guardserver.txt' ;
         end
         else
         begin
            suicheckbox2.Checked :=false;
            suiedit1.Enabled :=false;
            suiedit1.Text :='guardserver.txt';
         end;
      end
      else
      begin
         suicheckbox2.Checked :=false;
         suiedit1.Enabled :=false;
         suiedit1.Text :='guardserver.txt';
      end;
      reg.CloseKey ;
   end;

   if reg.OpenKey('\Software\netguard\baojing',false) then

⌨️ 快捷键说明

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