?? 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 = 'WF' then
begin
if CommStart then
Socket.SendText('PASSWORD');//服務器要求客戶端傳送密碼
end
else
begin
Socket.SendText('REJECT');//服務器接收客戶端傳送非法數據
end;
end
else if CommStr = 'PASSWORD' then//服務器接收客戶端傳送密碼
begin
if DataStr = 'xianwf' 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 + -