📄 telnetsrvmain.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 + -