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.

解决方案 »

  1.   


    // 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.