📄 servermain.~pas
字号:
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 + -