监测通过页面向网站提交的数据
2008-04-01 08:18
393 查看
我有一个程序,用于监测通过页面向网站提交的数据。使用方法是:
1/打开某个页面(比如mail.263.net)
2/填如数据(比如用户名和密码)
3/把Internet选项里面的代理服务器设为127.0.0.1:8080
5/启动监测程序
4/点击页面的提交按钮
这样在启动监测程序里就可以看到关于我们此次提交数据的详细情况,比如referer,cokkie等等。
问题如下:
这个程序在局域网下运行良好(我想可能是因为网卡设定了ip的缘故)。但是没有网卡的电脑,在拨号状态下程序就没有任何正面或负面效果!
这是不是因为本机没有ip而导致的呢?有什么方法解决这个问题呢?
程序主要有两个Unit如下:
// 1 //////////////////////////////////////////////////////////////////
unit pmain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, ToolWin, Menus, ImgList, StdCtrls, ExtCtrls, StdActns, ActnList,
ScktComp,FileCtrl;
type
Tmain = class(TForm)
Menu: TMainMenu;
ifile: TMenuItem;
Inew: TMenuItem;
iopen: TMenuItem;
iclose: TMenuItem;
ireply: TMenuItem;
N1: TMenuItem;
iexit: TMenuItem;
iedit: TMenuItem;
isaveto: TMenuItem;
N2: TMenuItem;
icut: TMenuItem;
icopy: TMenuItem;
ipaste: TMenuItem;
iview: TMenuItem;
itoolbar: TMenuItem;
istatusbar: TMenuItem;
iabout: TMenuItem;
iaboutit: TMenuItem;
TBar: TToolBar;
Buttonnew: TToolButton;
Buttonopen: TToolButton;
Buttonsend: TToolButton;
Buttonclose: TToolButton;
ToolButton5: TToolButton;
Buttonabout: TToolButton;
panal: TPanel;
Sbar: TStatusBar;
talkspace: TMemo;
Images: TImageList;
Actions: TActionList;
ACopy: TEditCopy;
ACut: TEditCut;
APaste: TEditPaste;
Atoolbar: TAction;
Asbar: TAction;
Anew: TAction;
Aopen: TAction;
Aclose: TAction;
Areply: TAction;
Aexit: TAction;
Aabout: TAction;
Server: TServerSocket;
Splitter1: TSplitter;
stepspace: TMemo;
Asaveto: TAction;
OpenD: TOpenDialog;
buttonsave: TToolButton;
procedure AtoolbarExecute(Sender: TObject);
procedure AsbarExecute(Sender: TObject);
procedure AnewExecute(Sender: TObject);
procedure AopenExecute(Sender: TObject);
procedure AcloseExecute(Sender: TObject);
procedure AexitExecute(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure AsavetoExecute(Sender: TObject);
procedure AreplyExecute(Sender: TObject);
procedure ServerAccept(Sender: TObject; Socket: TCustomWinSocket);
procedure ServerClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerClientError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure ServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
procedure ServerClientWrite(Sender: TObject; Socket: TCustomWinSocket);
procedure ServerListen(Sender: TObject; Socket: TCustomWinSocket);
procedure ServerGetSocket(Sender: TObject; Socket: Integer;
var ClientSocket: TServerClientWinSocket);
procedure ServerGetThread(Sender: TObject;
ClientSocket: TServerClientWinSocket;
var SocketThread: TServerClientThread);
procedure ServerThreadEnd(Sender: TObject;
Thread: TServerClientThread);
procedure ServerThreadStart(Sender: TObject;
Thread: TServerClientThread);
procedure AaboutExecute(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure SbarResize(Sender: TObject);
private
{ Private declarations }
public
portnum:integer;
connectedcount:integer;
function dateandtime:string;
procedure showhint(sender:TObject);
{ Public declarations }
end;
var
main: Tmain;
implementation
{$R *.DFM}
uses port,handle;
function Tmain.dateandtime:string;
begin
result:=datetostr(date)+'/'+timetostr(time);
end;
procedure Tmain.showhint(sender:TObject);
begin
sbar.Panels[0].text:=application.Hint;
end;
procedure Tmain.AtoolbarExecute(Sender: TObject);
begin
atoolbar.Checked:=not atoolbar.Checked;
tbar.Visible:=atoolbar.Checked;
end;
procedure Tmain.AsbarExecute(Sender: TObject);
begin
asbar.Checked:=not asbar.Checked;
sbar.Visible:=asbar.Checked;
end;
procedure Tmain.AnewExecute(Sender: TObject);
begin
portdlg.ShowModal;
end;
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.
// 2 //////////////////////////////////////////////////////////////////
unit port;
interface
uses 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.
1/打开某个页面(比如mail.263.net)
2/填如数据(比如用户名和密码)
3/把Internet选项里面的代理服务器设为127.0.0.1:8080
5/启动监测程序
4/点击页面的提交按钮
这样在启动监测程序里就可以看到关于我们此次提交数据的详细情况,比如referer,cokkie等等。
问题如下:
这个程序在局域网下运行良好(我想可能是因为网卡设定了ip的缘故)。但是没有网卡的电脑,在拨号状态下程序就没有任何正面或负面效果!
这是不是因为本机没有ip而导致的呢?有什么方法解决这个问题呢?
程序主要有两个Unit如下:
// 1 //////////////////////////////////////////////////////////////////
unit pmain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, ToolWin, Menus, ImgList, StdCtrls, ExtCtrls, StdActns, ActnList,
ScktComp,FileCtrl;
type
Tmain = class(TForm)
Menu: TMainMenu;
ifile: TMenuItem;
Inew: TMenuItem;
iopen: TMenuItem;
iclose: TMenuItem;
ireply: TMenuItem;
N1: TMenuItem;
iexit: TMenuItem;
iedit: TMenuItem;
isaveto: TMenuItem;
N2: TMenuItem;
icut: TMenuItem;
icopy: TMenuItem;
ipaste: TMenuItem;
iview: TMenuItem;
itoolbar: TMenuItem;
istatusbar: TMenuItem;
iabout: TMenuItem;
iaboutit: TMenuItem;
TBar: TToolBar;
Buttonnew: TToolButton;
Buttonopen: TToolButton;
Buttonsend: TToolButton;
Buttonclose: TToolButton;
ToolButton5: TToolButton;
Buttonabout: TToolButton;
panal: TPanel;
Sbar: TStatusBar;
talkspace: TMemo;
Images: TImageList;
Actions: TActionList;
ACopy: TEditCopy;
ACut: TEditCut;
APaste: TEditPaste;
Atoolbar: TAction;
Asbar: TAction;
Anew: TAction;
Aopen: TAction;
Aclose: TAction;
Areply: TAction;
Aexit: TAction;
Aabout: TAction;
Server: TServerSocket;
Splitter1: TSplitter;
stepspace: TMemo;
Asaveto: TAction;
OpenD: TOpenDialog;
buttonsave: TToolButton;
procedure AtoolbarExecute(Sender: TObject);
procedure AsbarExecute(Sender: TObject);
procedure AnewExecute(Sender: TObject);
procedure AopenExecute(Sender: TObject);
procedure AcloseExecute(Sender: TObject);
procedure AexitExecute(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure AsavetoExecute(Sender: TObject);
procedure AreplyExecute(Sender: TObject);
procedure ServerAccept(Sender: TObject; Socket: TCustomWinSocket);
procedure ServerClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerClientError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure ServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
procedure ServerClientWrite(Sender: TObject; Socket: TCustomWinSocket);
procedure ServerListen(Sender: TObject; Socket: TCustomWinSocket);
procedure ServerGetSocket(Sender: TObject; Socket: Integer;
var ClientSocket: TServerClientWinSocket);
procedure ServerGetThread(Sender: TObject;
ClientSocket: TServerClientWinSocket;
var SocketThread: TServerClientThread);
procedure ServerThreadEnd(Sender: TObject;
Thread: TServerClientThread);
procedure ServerThreadStart(Sender: TObject;
Thread: TServerClientThread);
procedure AaboutExecute(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure SbarResize(Sender: TObject);
private
{ Private declarations }
public
portnum:integer;
connectedcount:integer;
function dateandtime:string;
procedure showhint(sender:TObject);
{ Public declarations }
end;
var
main: Tmain;
implementation
{$R *.DFM}
uses port,handle;
function Tmain.dateandtime:string;
begin
result:=datetostr(date)+'/'+timetostr(time);
end;
procedure Tmain.showhint(sender:TObject);
begin
sbar.Panels[0].text:=application.Hint;
end;
procedure Tmain.AtoolbarExecute(Sender: TObject);
begin
atoolbar.Checked:=not atoolbar.Checked;
tbar.Visible:=atoolbar.Checked;
end;
procedure Tmain.AsbarExecute(Sender: TObject);
begin
asbar.Checked:=not asbar.Checked;
sbar.Visible:=asbar.Checked;
end;
procedure Tmain.AnewExecute(Sender: TObject);
begin
portdlg.ShowModal;
end;
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.
// 2 //////////////////////////////////////////////////////////////////
unit port;
interface
uses 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.
相关文章推荐
- python脚本采集服务器数据通过API提交到django web服务器,然后展示在页面上
- 通过Iframe在A网站页面内嵌入空白页面的方式,跨域获取B网站的数据返回给A网站!
- easyui关于解决tab添加的页面通过href加载数据内容的页面刷新后form表单重复提交的问题;
- 黄聪:C#模拟网站页面POST数据提交表单(一)--WebClient (转)
- JAVA开发中,页面post提交的数据后台通过request取出时是空的,所有参数都消失了
- 后台通过页面对网站数据的导入导出
- 黄聪:C#模拟网站页面POST数据提交表单(一)--WebClient (转)
- 黄聪:C#模拟网站页面POST数据提交表单(二)--HttpWebRequest以及HttpWebResponse (转)
- spring mvc 通过redirect重定向防止刷新页面重复提交又能返回数据给前台页面
- 黄聪:C#模拟网站页面POST数据提交表单(二)--HttpWebRequest以及HttpWebResponse (转)
- 防提交的页面不是本网站(非法链接到网站)
- PHP防止页面刷新重复提交数据
- php模拟post提交数据,用处很多,可用来网站的采集,登陆等等
- 使用 HttpWebRequest 向网站提交数据
- 通过html邮件提交数据
- 在静态页面中,通过asp.net页面调用数据库数据
- 通过vb程序向ASP表单提交数据
- asp.net 我亲自体验页面刷新和后退造成的数据重复提交!
- iOS开发标记——各个ViewController页面数据交互,通过NSUserDefaults实现。
- SubmitOncePage:解决刷新页面造成的数据重复提交