Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 14.11.2007, 20:45   #1
zAlexandrz
Пользователь
 
Аватар для zAlexandrz
 
Регистрация: 03.11.2007
Сообщений: 25
По умолчанию Алгоритм получения диапазона IP

Нужна помощь.
Как получить диапазон IP.
Есть два значения:
start:='192.168.1.1'
stop:='192.168.10.20'
Как получить массив всех IP в этом диапазоне?
Кто нибудь делал программу, подскажите пожалуйста.
zAlexandrz вне форума
Старый 15.11.2007, 12:32   #2
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Раскладываем строки на 4 числа каждую. Потом 4 вложенных цикла - самый понятный вариант
zetrix вне форума
Старый 15.11.2007, 14:12   #3
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Решил на сон грядущий развеяться...

Код:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, winsock2, StdCtrls;

type TIP = record
  case integer of
    1: (b1, b2,b3,b4: byte);
    2: (dw: DWORD);
end;

type
  TForm2 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    ListBox1: TListBox;
    procedure Button1Click(Sender: TObject);
  private
    IP1, IP2: TIP;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
var
  i,j: byte;
  wsdat: TWSADATA;
begin
WSASTARTUP(WINSOCK_VERSION, wsdat);
ip1.dw := inet_addr(PChar(Edit1.Text));
ip2.dw := inet_addr(PChar(Edit2.Text));

for i := ip1.b3 to 255 do
begin
  for j := 0 to 255 do
    begin
    ip1.b3 := i;
    ip1.b4 := j;
    ListBox1.Items.Add(StrPas(inet_ntoa(TInAddr(ip1.dw))));
    if StrPas(inet_ntoa(TInAddr(ip1.dw))) = edit2.Text then exit;
    end;//J
end;//I
end;

end.
Баламут вне форума
Старый 15.11.2007, 18:05   #4
zAlexandrz
Пользователь
 
Аватар для zAlexandrz
 
Регистрация: 03.11.2007
Сообщений: 25
По умолчанию

спасибо,
я сделал без применения функций winsock2 и winapi

вот:

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Memo1: TMemo;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    Button1: TButton;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  i,count:integer;
  start,stop:array[1..4] of integer;
  resultip:array[1..100000]of string[16];

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
count:=1;
start[1]:=strtoint(edit1.Text);
start[2]:=strtoint(edit2.Text);
start[3]:=strtoint(edit3.Text);
start[4]:=strtoint(edit4.Text);
stop[1]:=strtoint(edit5.Text);
stop[2]:=strtoint(edit6.Text);
stop[3]:=strtoint(edit7.Text);
stop[4]:=strtoint(edit8.Text);


repeat
for i:=1 to 4 do
resultip[count]:=resultip[count]+inttostr(start[i])+'.';
delete(resultip[count],length(resultip[count]),1);
start[4]:=start[4]+1;
count:=count+1;
for i:=4 downto 2 do
  if start[i]>255 then
  begin
  start[i]:=0;
  start[i-1]:= start[i-1]+1;
  end;
until (start[1]=stop[1])and(start[2]=stop[2])and(start[3]=stop[3])and(start[4]=stop[4]+1);
count:=count-1;



for i:=1 to count do
memo1.Lines.Add(resultip[i]);
end;
end.

Последний раз редактировалось mihali4; 27.02.2010 в 00:08.
zAlexandrz вне форума
Старый 26.02.2010, 22:43   #5
Шульц
Форумчанин
 
Регистрация: 14.09.2008
Сообщений: 172
По умолчанию

А что такое winsock2? У меня делфа на него ругается, где его взять?
Шипулин А. В.
Шульц вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получения номера страницы по выделенной ячейки brezze Microsoft Office Excel 1 11.07.2008 22:06
Люди программисты как вы решаете проблему получения денег ? mikityak Фриланс 6 08.06.2008 15:33
Имя диапазона CAMyM Microsoft Office Excel 8 09.11.2007 10:16
Delphi. Программа, которая использует системные функции для получения информации о файловой системе metamfetamin Помощь студентам 16 08.11.2007 13:24
Выбор Диапазона Дат Chepa БД в Delphi 2 02.02.2007 10:25