На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Соблюдайте общие правила форума
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Указывайте точные версии Delphi и используемых сетевых библиотек.

Не приветствуется поднятие старых тем. Если ваш вопрос перекликается со старой темой, то для вопроса лучше создать новую тему, а старую указать в первом сообщении с описанием взаимосвязи.

Внимание:
попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Krid, user posted image Rouse_

Модераторы: Krid, Rouse_
  
> отладка - пример сканера , отладка пример сканера
    имеется пример сканера он в интернете достаточно распространён, код внизу. Я его использовал работает, но вот что интересно выдаёт через некоторое время ошибку по адресу...
    ExpandedWrap disabled
      [DCC Warning] Unit23.pas(81): W1057 Implicit string cast from 'AnsiChar' to 'string' что тут неявный переход??
      [DCC Warning] Unit23.pas(137): W1024 Combining signed and unsigned types - widened both operands - типы без знака?
      [DCC Warning] Unit23.pas(176): W1057 Implicit string cast from 'AnsiChar' to 'string'


    код сканера
    ExpandedWrap disabled
      unit Unit23;
       
      interface
       
      uses
        Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
        Dialogs, Gauges, StdCtrls, Spin, Buttons, ExtCtrls, AppEvnts,winsock;
       
      type
        TForm23 = class(TForm)
          Panel1: TPanel;
          Label1: TLabel;
          Label2: TLabel;
          SpeedButton1: TSpeedButton;
          Label3: TLabel;
          Label4: TLabel;
          Edit1: TEdit;
          SpinEdit1: TSpinEdit;
          SpinEdit2: TSpinEdit;
          ListBox1: TListBox;
          ProgressBar1: TGauge;
          ApplicationEvents1: TApplicationEvents;
          procedure ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
          procedure SpeedButton1Click(Sender: TObject);
          procedure FormDestroy(Sender: TObject);
          procedure FormCreate(Sender: TObject);
        end;
       
        TMyThread = class(TThread)
         protected
          procedure Execute; override;
        end;
       
        TFSocket = record
         sa: TSockAddr;
         FData: integer;
         TimeOut: integer;
        end;
       
      const
       MAX_PORTS=500;
       Ping=5000;
       
      var
        Form23: TForm23;
        FSocket: array [0..MAX_PORTS - 1] of TFSocket;
        FPort: WORD;
        FInfo: TWSADATA;
        FHost: integer;
        FPStart, FPEnd: WORD;
        SThread: TMyThread;
      implementation
       
      uses Unit1;
       
      {$R *.dfm}
       
      procedure TForm23.ApplicationEvents1Message(var Msg: tagMSG;
        var Handled: Boolean);
      var
       pSrvEnt:pServEnt;
       sPortDescription:String;
      // j : integer;
      // port: array [0..41] of integer;
      begin
       if (Msg.message>=FPStart+WM_USER)
                                      and (Msg.message<=FPEnd+WM_USER)
       then
       if WSAGETSELECTERROR(Msg.lParam)=0
       then
        case WSAGETSELECTEVENT(msg.lParam) of
         FD_CONNECT:
            begin
          //   pSrvEnt := getservbyport(htons(port[j]),'TCP');
             pSrvEnt := getservbyport(htons(msg.message - WM_USER),'TCP');
             if Assigned (pSrvEnt) then
              sPortDescription := 'service: ' + string(pSrvEnt^.s_name)
             else
              sPortDescription := '';
             ListBox1.Items.Add(IntToStr(ListBox1.Count+1)+
                              ') IP: '+inet_ntoa(FSocket[0].sa.sin_addr)+'  |  '+
                              'Port: '+intToStr(Msg.message - WM_USER) + '  |  ' +
                              sPortDescription);
             Application.ProcessMessages;
            end;
        end;
       Handled:=false;
      end;
       
      procedure TForm23.FormCreate(Sender: TObject);
      var
       i: integer;
      begin
       if WSAStartup(MAKEWORD(2, 0), FInfo)<>0
       then Halt;
       for i:=0 to MAX_PORTS-1 do
       with FSocket[i] do
        begin
         TimeOut := 0;
         FData := Socket(AF_INET, SOCK_STREAM, 0);
         if FData = SOCKET_ERROR
         then
          begin
           WSACleanup;
           Halt;
          end;
        end;
       Application.OnMessage:=Form23.ApplicationEvents1Message;
      end;
       
      procedure TForm23.FormDestroy(Sender: TObject);
      var
       i: integer;
      begin
       if SThread<>nil
       then
        begin
         SThread.Terminate;
         SThread.WaitFor;
         SThread:=nil;
        end;
       for i:=0 to MAX_PORTS-1 do
        CloseSocket(FSocket[i].FData);
       WSACleanup;
      end;
       
       
      procedure InitSockets;
      var
       i: integer;
      begin
       for i:=0 to MAX_PORTS-1 do
        with FSocket[i] do
         if (FPort>=FPEnd) or (SThread.Terminated)
         then break
         else
          if GetTickCount-TimeOut>PING
          then
           begin
            sa.sin_family:=AF_INET;
            sa.sin_addr.S_addr:=FHost;
            sa.sin_port:=htons(FPort);
            //
            WSAAsyncSelect(FData, Application.Handle, WM_USER+FPort, FD_CONNECT);
            connect(FData, FSocket[i].sa, SizeOf(FSocket[i].sa));
            TimeOut:=GetTickCount;
            inc(FPort);
            Form23.Label2.Caption:='Port: '+intToStr(FPort);
            Form23.ProgressBar1.Progress:=trunc(((FPort-FPStart)*100)/(FPEnd-FPStart));
            Application.ProcessMessages;
            //
            Sleep(PING div MAX_PORTS);
           end;
      end;
       
      procedure TMyThread.Execute;
      var
       i: integer;
       buf: in_addr;
      begin
       FPStart:=Form23.SpinEdit1.Value;
       FPEnd:=Form23.SpinEdit2.Value;
       FHost:=inet_addr(PansiChar(AnsiString(Form23.Edit1.Text)));
       if (FPEnd<=FPStart)or (Form23.SpinEdit1.Value>65535) or
                                  (Form23.SpinEdit2.Value>65535)
       then FHost:=SOCKET_ERROR;
       if FHost=SOCKET_ERROR
       then
        begin
         if not Terminated
         then SThread:=nil;
         Form23.SpeedButton1.Caption:='Запуск';
         Exit;
        end;
       buf.S_addr:=FHost;
       Form23.Edit1.Text:=inet_ntoa(buf);
       Form23.ListBox1.Clear;
       FPort:=FPStart;
       for i:=0 to MAX_PORTS-1 do
        with FSocket[i] do
         begin
          TimeOut:=0;
          FData:=Socket(AF_INET, SOCK_STREAM, 0);
         end;
       //
       while not Terminated do
        begin
         InitSockets;
         if FPort>=FPEnd
         then break;
        end;
       //
       for i:=0 to MAX_PORTS-1 do
        CloseSocket(FSocket[i].FData);
       //
       if not Terminated
       then
        begin
         SThread:=nil;
         Form23.SpeedButton1.Caption:='Start';
        end;
      end;
       
      procedure TForm23.SpeedButton1Click(Sender: TObject);
      begin
       if SThread=nil
       then
        begin
         SThread:=TMyThread.Create(false);
         SpeedButton1.Caption:='Stop';
        end
       else
        begin
         SThread.Terminate;
         SThread.WaitFor;
         SThread:=nil;
         SpeedButton1.Caption:='Start';
        end;
      end;
       
      end.
      Implicit string cast from 'AnsiChar' to 'string' - это не неявный переход, а неявное привидение типа из указателя на AnsiChar к строке.
      Но в любом случае, к ошибке по адресу эти варнинги отношения не имеют.
      Надо смотреть, что за адрес и пробовать отлаживать. Возможно, где-то портится память
        вот адрес
        Прикреплённый файлПрикреплённый файлerror.jpg (31.75 Кбайт, скачиваний: 546)
          при настройке запуск студио с остановом затем goto search 004d6cde, а дальше действия, где адрес 00000278? Куда вводить?
          Прикреплённый файлПрикреплённый файлerror2.jpg (196.41 Кбайт, скачиваний: 604)
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0.0798 ]   [ 20 queries used ]   [ Generated: 23.08.26, 22:46 GMT ]