procedure Tmain.AopenExecute(Sender: TObject);
begin
if server.Active then
begin
stepspace.Lines.Add
('监听端口'+inttostr(portnum)+'已经打开!');
exit;
end
else
begin
server.Port:=portnum;
server.Active:=true;
connectedcount:=0;
stepspace.Lines.Add('正在打开监听端口'+inttostr(portnum)+'!');
stepspace.Lines.Add(dateandtime);
sbar.Panels[1].text:='已经激活监听!端口为'+inttostr(portnum)+'!';
sbar.Panels[2].text:='';
end;
end;procedure Tmain.AcloseExecute(Sender: TObject);
begin
if not server.Active then
begin
stepspace.Lines.Add('请注意,监听并未被激活!');
stepspace.Lines.Add(dateandtime);
exit;
end
else
begin
server.Active:=false;
stepspace.Lines.Add('正在停止监听!');
stepspace.Lines.Add(dateandtime);
connectedcount:=0;
sbar.Panels[1].text:='监听未被激活!';
sbar.Panels[2].text:='';
end;end;procedure Tmain.AexitExecute(Sender: TObject);
begin
close;
end;procedure Tmain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if server.Active then server.Active:=false;
end;procedure Tmain.AsavetoExecute(Sender: TObject);
var tarfile:Textfile;
i:integer;
begin
if opend.Execute then
begin
if not fileexists(opend.filename) then
begin
i:=filecreate(opend.filename);
if i>0 then fileclose(I)
else
begin
messagedlg('请注意,建立文件错误!',mtWarning,[mbYes],0);
exit;
end;
end;
try
assignfile(tarfile,opend.filename);
append(tarfile);
for i:=0 to talkspace.Lines.Count-1 do
writeln(tarfile,talkspace.Lines.Strings[i]);
writeln(tarfile,'/******************开始********************/');
for i:=0 to stepspace.Lines.Count-1 do
writeln(tarfile,stepspace.Lines.Strings[i]);
writeln(tarfile,'/--------------------------------------/');
writeln(tarfile,dateandtime);
writeln(tarfile,'/******************结束********************/');
finally
closefile(tarfile);
end;
end;
end;procedure Tmain.AreplyExecute(Sender: TObject);
begin
if not server.Active then
begin
stepspace.Lines.Add('请注意,监听并没有被激活!');
stepspace.Lines.Add(dateandtime);
exit;
end
else
handledlg.ShowModal;
end;procedure Tmain.ServerAccept(Sender: TObject; Socket: TCustomWinSocket);
begin
connectedcount:=connectedcount+1;
sbar.Panels[1].text:='现在连接数为:'+inttostr(connectedcount);
stepspace.Lines.Add('接受客户端连接');
stepspace.Lines.Add(dateandtime);
end;procedure Tmain.ServerClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
stepspace.Lines.Add('客户端请求连接!');
stepspace.Lines.Add(dateandtime);
end;procedure Tmain.ServerClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
connectedcount:=connectedcount-1;
sbar.Panels[1].text:='现在连接数为:'+inttostr(connectedcount);
stepspace.Lines.Add('与客户端断开连接');
stepspace.Lines.Add(dateandtime);
end;procedure Tmain.ServerClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
var repstr:string;
begin stepspace.Lines.Add('连接发生错误!错误号为:'+inttostr(errorcode)); case errorevent of
eeGeneral:repstr:='The socket received an error message that does not fit into any of the following categories.';
eeSend: repstr:='An error occurred when trying to write to the socket connection.';
eeReceive: repstr:='An error occurred when trying to read from the socket connection.';
eeConnect: repstr:='A connection request that was already accepted could not be completed.';
eeDisconnect: repstr:='An error occurred when trying to close a connection.';
eeAccept: repstr:='A problem occurred when trying to accept a client connection req';
end;
repstr:='错误事件是:'+repstr;
stepspace.Lines.Add(repstr);
stepspace.Lines.Add(dateandtime);
try
socket.Free;
sbar.Panels[2].text:='';
connectedcount:=connectedcount-1;
sbar.Panels[1].text:='现在连接数为:'+inttostr(connectedcount);
finally
ErrorCode:=0;
end;
end;procedure Tmain.ServerClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var tems:String;
begin
stepspace.Lines.Add('/*******************************************/');
stepspace.Lines.Add('客户端发送数据'); tems:=socket.ReceiveText;
stepspace.Lines.Add(tems);
stepspace.Lines.Add(dateandtime);
stepspace.Lines.Add('/*******************************************/');
end;procedure Tmain.ServerClientWrite(Sender: TObject;
Socket: TCustomWinSocket);
begin
stepspace.Lines.Add('处于可以向客户端发送数据状态!');
stepspace.Lines.Add(dateandtime);
end;procedure Tmain.ServerListen(Sender: TObject; Socket: TCustomWinSocket);
begin
stepspace.Lines.Add('服务器端已经被激活,正在监听!');
stepspace.Lines.Add(dateandtime);
end;procedure Tmain.ServerGetSocket(Sender: TObject; Socket: Integer;
var ClientSocket: TServerClientWinSocket);
begin
stepspace.Lines.Add('服务器端正在建立新的socket以进行通信');
stepspace.Lines.Add(dateandtime);
end;procedure Tmain.ServerGetThread(Sender: TObject;
ClientSocket: TServerClientWinSocket;
var SocketThread: TServerClientThread);
begin
stepspace.Lines.Add('服务器端正在获得新的线程以进行通信,该线程为socket '
+inttostr(clientsocket.Handle)
+'建立 '
+'线程号为:'+inttostr(socketThread.ThreadID));
stepspace.Lines.Add(dateandtime);
end;procedure Tmain.ServerThreadEnd(Sender: TObject;
Thread: TServerClientThread);
begin
stepspace.Lines.Add('服务器端正在结束线程,'
+'线程号为:'+inttostr(Thread.ThreadID));
stepspace.Lines.Add(dateandtime);
end;procedure Tmain.ServerThreadStart(Sender: TObject;
Thread: TServerClientThread);
begin
stepspace.Lines.Add('服务器端正在开始线程,'
+'线程号为:'+inttostr(Thread.ThreadID));
stepspace.Lines.Add(dateandtime);
end;procedure Tmain.AaboutExecute(Sender: TObject);
var explain,caption:pchar;
begin
explain:=stralloc(256);
caption:=stralloc(256);
strPcopy(explain,'这是一个简单的HTTP协议分析工具,'
+#13#10+'它模拟的是类似于IIS的WWW服务器,'
+#13#10+'等价于服务器端。通过监听及接收 '
+#13#10+'客户端的请求,可以得到相应的请 '
+#13#10+'求报文,便于分析。'
+#13#10+
#13#10+ ' 作者:goldensplit');
strpcopy(caption,'说明');
application.MessageBox(explain,caption,MB_OK);
strdispose(explain);
strdispose(caption);
end;procedure Tmain.FormCreate(Sender: TObject);
begin
portnum:=80;
connectedcount:=0;
application.OnHint:=showhint;
sbar.Panels[1].text:='监听未被激活!';
if not DirectoryExists(ExtractFilePath(ParamStr(0))+'netlog')
then ForceDirectories(ExtractFilePath(ParamStr(0))+'netlog');
opend.InitialDir:=ExtractFilePath(ParamStr(0))+'netlog';
end;procedure Tmain.SbarResize(Sender: TObject);
begin
sbar.Panels[0].width:=trunc(sbar.Width*0.4);
sbar.panels[1].width:=trunc(sbar.width*0.3);
end;end.
解决方案 »
- VarArrayCreate([0, 1, 0, 3], varDouble);
- Idhttp post参数问题 我的跟他们的不一样
- 如何实现程序启动后10秒自动最小化到托盘,再过10秒又恢复到主窗口?
- 如何将本地Access 数据库提交到 网络中的 SQL服务器的表中.(在线等....)
- 名词太多 头都搞得好大 帮帮我!...
- 打印问题?几天没解决!
- Edit控件的一个事件作用的问题???????——————在线等待!
- 为什么我中止程序时,老是出现CPU调试界面。
- 各位老大:我做了一个application service服务程序,可以运行,但没有窗体显示.有没有办法让它显示窗体?
- 怎么提取数据里的内容
- 关于参数传递的例子,我是菜鸟,请赐教
- 请教 怎样在存储过程中实现模糊查询
// 2 //////////////////////////////////////////////////////////////////unit port;interfaceuses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,Dialogs,
Buttons, ExtCtrls,pmain;type
TportDlg = class(TForm)
OKBtn: TButton;
CancelBtn: TButton;
Bevel1: TBevel;
Label1: TLabel;
Label2: TLabel;
portedit: TEdit;
procedure OKBtnClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
portDlg: TportDlg;implementation{$R *.DFM}procedure TportDlg.OKBtnClick(Sender: TObject);
var i,portnumtemp:integer;
chartemp:char;
stringtemp:string[5];
begin
if length(trim(portedit.text))>5 then
begin
messagedlg('输入数据超长!',mtError,[mbYes],0);
exit;
end;
stringtemp:=trim(portedit.text);
for i:=1 to length(trim(portedit.text)) do
begin
chartemp:=stringtemp[i];
if ((chartemp<'0') or (chartemp>'9')) then
if ((chartemp='+') and (i=1)) then continue
else
begin
messagedlg('请正确的输入一个正整数!',mtError,[mbYes],0);
exit;
end;
end;
portnumtemp:=main.portnum ;
try
main.portnum:=strtoint(stringtemp);
except
on EConvertError do
begin
messagedlg('请正确的输入一个正整数!',mtError,[mbYes],0);
main.portnum:=portnumtemp;
exit;
end;
end;
with main do
begin
if ((portnum=portnumtemp)and(server.Active)) then
begin
stepspace.Lines.Add
('监听端口'+inttostr(portnumtemp)+'已经打开!');
exit;
end;
if server.Active then server.Active:=false;
server.port:=portnum;
server.active:=true;
connectedcount:=0;
stepspace.Lines.Add('正在打开监听端口'+inttostr(portnum)+'!');
stepspace.Lines.Add(dateandtime);
sbar.Panels[1].text:='已经激活监听!端口为'+inttostr(portnum);
sbar.Panels[2].text:='';
end;
end;procedure TportDlg.FormActivate(Sender: TObject);
begin
portedit.Text:=inttostr(main.portnum);
end;end.