Форум программистов, компьютерный форум, киберфорум
Delphi: Сети
Войти
Регистрация
Восстановить пароль
 
3 / 3 / 0
Регистрация: 25.04.2012
Сообщений: 97
1

Сбивается пинг

31.03.2016, 14:34. Просмотров 357. Ответов 1
Метки нет (Все метки)


Нужен так называемый мониторинг хостов в локальной сети. Работаю в Delphi 7 с подключенной synapse, откуда беру процедуру пинга(прилагаю проект и synapse).
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
unit Unit1;
 
interface
 
uses
  Windows, Messages, Classes, Forms,
  PingSend, IPUtils, StrUtils, Controls, StdCtrls;
 
const PING_RES=WM_USER + 1000;
 
type
  TForm1 = class(TForm)
    GroupBox2: TGroupBox;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    RadioButton3: TRadioButton;
    RadioButton4: TRadioButton;
    RadioButton5: TRadioButton;
    RadioButton6: TRadioButton;
    RadioButton7: TRadioButton;
    RadioButton8: TRadioButton;
    RadioButton9: TRadioButton;
    RadioButton10: TRadioButton;
    RadioButton11: TRadioButton;
    RadioButton12: TRadioButton;
    RadioButton13: TRadioButton;
    RadioButton14: TRadioButton;
    RadioButton15: TRadioButton;
    RadioButton16: TRadioButton;
    RadioButton17: TRadioButton;
    RadioButton18: TRadioButton;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
 
  private
    procedure OnPingMessage(var msg: TMessage); message PING_RES;
  end;
 
    procedure PingBegin;
    procedure PingEnd;
 
type
     PPingResult = ^TPingResult;
     TPingResult = Record
                     IPAdress:String;
                     Exists:Boolean;
                   end;
 
type
  TPingThread = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
  public
    PingResult:TPingResult;
    Ready:Boolean;
    constructor Create(Ping:TPingResult);
  end;
 
var
  Form1: TForm1;
  pingstop:boolean;
  ThreadArray:Array of TPingThread;
  ThreadsComplete:Boolean;
  Ping:Array of TPingResult;
  PingCount:integer;
 
 
implementation
 
 
{$R *.dfm}
 
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  PingBegin;
end;
 
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  PingEnd;
end;
 
 
procedure PingBegin;
var i:integer;
begin
  pingstop:=false;
  PingCount:=18;
 
  // Initialize dyn. Arrays
  SetLength(Ping,PingCount);
  SetLength(ThreadArray,PingCount);
 
  Ping[0].IPAdress := '192.168.9.100';
  Ping[0].Exists   := false;
  Ping[1].IPAdress := '192.168.9.101';
  Ping[1].Exists   := false;
  Ping[2].IPAdress := '192.168.9.102';
  Ping[2].Exists   := false;
  Ping[3].IPAdress := '192.168.9.103';
  Ping[3].Exists   := false;
  Ping[4].IPAdress := '192.168.9.104';
  Ping[4].Exists   := false;
  Ping[5].IPAdress := '192.168.9.105';
  Ping[5].Exists   := false;
  Ping[6].IPAdress := '192.168.9.106';
  Ping[6].Exists   := false;
  Ping[7].IPAdress := '192.168.9.107';
  Ping[7].Exists   := false;
  Ping[8].IPAdress := '192.168.9.108';
  Ping[8].Exists   := false;
 
  Ping[9].IPAdress := '192.168.9.109';
  Ping[9].Exists   := false;
  Ping[10].IPAdress := '192.168.9.110';
  Ping[10].Exists   := false;
  Ping[11].IPAdress := '192.168.9.111';
  Ping[11].Exists   := false;
  Ping[12].IPAdress := '192.168.9.112';
  Ping[12].Exists   := false;
  Ping[13].IPAdress := '192.168.9.113';
  Ping[13].Exists   := false;
  Ping[14].IPAdress := '192.168.9.114';
  Ping[14].Exists   := false;
  Ping[15].IPAdress := '192.168.9.115';
  Ping[15].Exists   := false;
  Ping[16].IPAdress := '192.168.9.116';
  Ping[16].Exists   := false;
  Ping[17].IPAdress := '192.168.9.117';
  Ping[17].Exists   := false;
 
  // Create one Thread for each Ping
  for i := 0 to PingCount-1 do begin
    ThreadArray[i] := TPingThread.Create(Ping[i]);
    end;
end;
 
 
procedure PingEnd;
var
  i:integer;
begin
  pingstop:=true;
  // Wait till all threads are executed
  repeat
    ThreadsComplete := true;
    Sleep(1000);
    for i := 0 to PingCount-1 do
      if not ThreadArray[i].Ready then begin
        ThreadsComplete := false;
        break;
      end;
  until ThreadsComplete;
  // Free Threads
  for i := 0 to PingCount-1 do
    ThreadArray[i].Free;
end;
 
 
constructor TPingThread.Create(Ping:TPingResult);
begin
  PingResult.IPAdress := Ping.IPAdress;
  inherited Create(False);
end;
 
 
procedure TPingThread.Execute;
var
  Ping:TPingSend;
  pingprev,pingthis:boolean;
begin
  pingprev:=false;
  pingthis:=false;
  Ready:= false;
  Ping:= TPingSend.Create;
  Ping.Timeout := 2000;
  while pingstop=false do begin
    //try
    PingResult.Exists := Ping.Ping(PingResult.IPAdress);
    pingprev:=pingthis;
    pingthis:=PingResult.Exists;
    //except end;
    if pingthis<>pingprev then
      PostMessage(Form1.Handle,PING_RES,IPToCardinal(strtoip(PingResult.IPAdress)),integer(PingResult.Exists));
    sleep(1000);
  end;
  Ping.Free;
  Ready := true;
end;
 
 
procedure TForm1.OnPingMessage(var msg: TMessage);
var
  ip:string;
begin
    ip:=iptostr(cardinaltoip(msg.WParam));
    case ANSIIndexText( ip , ['192.168.9.100', '192.168.9.101', '192.168.9.102', '192.168.9.103',
                              '192.168.9.104', '192.168.9.105', '192.168.9.106', '192.168.9.107',
                              '192.168.9.108',
 
                              '192.168.9.109', '192.168.9.110', '192.168.9.111', '192.168.9.112',
                              '192.168.9.113', '192.168.9.114', '192.168.9.115', '192.168.9.116',
                              '192.168.9.117']) of
 
    0:Form1.RadioButton1.Enabled:=boolean(msg.LParam);
    1:Form1.RadioButton2.Enabled:=boolean(msg.LParam);
    2:Form1.RadioButton3.Enabled:=boolean(msg.LParam);
    3:Form1.RadioButton4.Enabled:=boolean(msg.LParam);
    4:Form1.RadioButton5.Enabled:=boolean(msg.LParam);
    5:Form1.RadioButton6.Enabled:=boolean(msg.LParam);
    6:Form1.RadioButton7.Enabled:=boolean(msg.LParam);
    7:Form1.RadioButton8.Enabled:=boolean(msg.LParam);
    8:Form1.RadioButton9.Enabled:=boolean(msg.LParam);
 
    9:Form1.RadioButton10.Enabled:=boolean(msg.LParam);
    10:Form1.RadioButton11.Enabled:=boolean(msg.LParam);
    11:Form1.RadioButton12.Enabled:=boolean(msg.LParam);
    12:Form1.RadioButton13.Enabled:=boolean(msg.LParam);
    13:Form1.RadioButton14.Enabled:=boolean(msg.LParam);
    14:Form1.RadioButton15.Enabled:=boolean(msg.LParam);
    15:Form1.RadioButton16.Enabled:=boolean(msg.LParam);
    16:Form1.RadioButton17.Enabled:=boolean(msg.LParam);
    17:Form1.RadioButton18.Enabled:=boolean(msg.LParam);
    end;
end;
Запускаю. Сначала все хорошо. Определенные радиобаттоны в enable. Потом отключаю какой-нибудь хост от сети. И начинается: радиобаттоны, хосты которых в сети, остаются в enable; а остальные начинают хаотично (вроде) включаться/выключаться (enable/disable). В чем дело?
0
Вложения
Тип файла: rar synapse40.rar (296.0 Кб, 0 просмотров)
Тип файла: rar Ping.rar (180.0 Кб, 0 просмотров)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.03.2016, 14:34
Ответы с готовыми решениями:

Ip пинг
Здравствуйте кто подскажет как можно делать проверку IP адреса. Например есть адрес и нужно...

Пинг принтеров
Добрый день! Необходимо написать программу для просмотра принтеров в сети. Т.е есть программа...

Пинг на дельфи 7
Возникла необходимость создания утилитки для пингования. Погуглил, нашел несколько решений....

Пинг на роутер
Помогите пожалуйста может у кого есть нароботки нужна програмка для отправки пинга на роутер...

__________________
Помогаю в написании курсовых работ и дипломов здесь.
1
3 / 3 / 0
Регистрация: 25.04.2012
Сообщений: 97
01.04.2016, 16:27  [ТС] 2
Подскажите хоть, куда копать.

Добавлено через 8 часов 10 минут
Поменял в procedure TPingThread.Execute строку sleep(1000) на sleep(10000). Вроде стало нормально. Почему?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.04.2016, 16:27

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь или здесь.

Пинг и парсинг сайта
Добрый день. Такой вопросик. Есть программка типа сервер-клиент, в которой клиент записывает...

Быстрый пинг адреса
Такое вот дело: у меня в сети устройство со своим IP и своя прога, тока вот не задача, при старте...

Пинг компьютера подключенного через маршрутизатор
IdIcmpClient1.Host := ComboBox1.Text; IdIcmpClient1.Ping; Memo1.Lines.Add('Время до хоста: '...

С ПК1 к ПК2 идет пинг. А с ПК2 к ПК1 не идет пинг. Как сделать что бы с ПК2 шел пинг к ПК1 ?
В работе есть два сети, один старый, другой новый, так говорили. С новой сети можно пинговать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.