Форум программистов, компьютерный форум, киберфорум
Delphi: Сети
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 61
1

Ping

03.11.2012, 12:35. Показов 1442. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет. Возможно вопрос покажется тупой, но всё же.
Есть код, который определяет пинг удалённой машины.
Процедура:

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
procedure Ping(IP: String; OutRichEdit:TRichEdit);
const BUFSIZE = 3000;
var SecAttr    : TSecurityAttributes;
   hReadPipe,
   hWritePipe : THandle;
   StartupInfo: TStartUpInfo;
   ProcessInfo: TProcessInformation;
   Buffer     : Pchar;
   WaitReason,
   BytesRead  : DWord;
begin
with SecAttr do
begin
  nlength              := SizeOf(TSecurityAttributes);
  binherithandle       := true;
  lpsecuritydescriptor := nil;
end;
if Createpipe (hReadPipe, hWritePipe, @SecAttr, 0) then
begin
  Buffer  := AllocMem(BUFSIZE + 1);
  FillChar(StartupInfo, Sizeof(StartupInfo), #0);
  StartupInfo.cb          := SizeOf(StartupInfo);
  StartupInfo.hStdOutput  := hWritePipe;
  StartupInfo.hStdInput   := hReadPipe;
  StartupInfo.dwFlags     := STARTF_USESTDHANDLES +
                             STARTF_USESHOWWINDOW;
  StartupInfo.wShowWindow := SW_HIDE;
  if CreateProcess(nil,
     PChar('ping.exe '+IP),
     @SecAttr,
     @SecAttr,
     true,
     NORMAL_PRIORITY_CLASS,
     nil,
     nil,
     StartupInfo,
     ProcessInfo) then
    begin
      repeat
        WaitReason := WaitForSingleObject( ProcessInfo.hProcess,100);
        Application.ProcessMessages;
      until (WaitReason <> WAIT_TIMEOUT);
      Repeat
        BytesRead := 0;
        ReadFile(hReadPipe, Buffer[0], BUFSIZE, BytesRead, nil);
        Buffer[BytesRead]:= #0;
        OemToAnsi(Buffer,Buffer);
        OutRichEdit.Text := OutRichEdit.text + String(Buffer);
      until (BytesRead < BUFSIZE);
    end;
  FreeMem(Buffer);
  CloseHandle(ProcessInfo.hProcess);
  CloseHandle(ProcessInfo.hThread);
  CloseHandle(hReadPipe);
  CloseHandle(hWritePipe);
end;

На кнопке:

Delphi
1
2
3
4
procedure TForm3.BitBtn30Click(Sender: TObject);
begin
Ping('89.208.116.60', RichEdit5);
end;
На компоненте IdIcmpClient
Delphi
1
2
IdIcmpClient1.Ping;
RichEdit5.Lines.Add(IntToStr(IdIcmpClient1.ReplyStatus.TimeToLive))

Брал код с другого форума, только немного переделал.
Так вот. Результат пинга отображается в RichEdit5. Некоторые строчки вывожу на Label"ы. А именно:
Delphi
1
2
3
4
5
6
procedure TForm3.RichEdit5Change(Sender: TObject);
begin
Label9.Caption:=RichEdit5.Lines[8];
Label10.Caption:=RichEdit5.Lines[10];
Label11.Caption:=RichEdit5.Lines[11];
end;
Актуально только тогда, когда результат успешен, тоесть

Обмен пакетами с 89.208.116.60 по с 32 байтами данных:
Ответ от 89.208.116.60: число байт=32 время=107мс TTL=109
Ответ от 89.208.116.60: число байт=32 время=106мс TTL=109
Ответ от 89.208.116.60: число байт=32 время=107мс TTL=109
Ответ от 89.208.116.60: число байт=32 время=107мс TTL=109

Статистика Ping для 89.208.116.60:
Пакетов: отправлено = 4, получено = 4, потеряно = 0
(0% потерь)
Приблизительное время приема-передачи в мс:
Минимальное = 106мсек, Максимальное = 107 мсек, Среднее = 106 мсек
На Label'ах отображается
Пакетов: отправлено = 4, получено = 4, потеряно = 0
Приблизительное время приема-передачи в мс:
Минимальное = 106мсек, Максимальное = 107 мсек, Среднее = 106 мсек
Так вот, задача в том, что б при отрицательном ответе(тоесть, пинг отсутствует) на Label"ах 8,10,11 отображались другие строчки с RichEdit5, ибо не совпадает. При отрицательном ответе выводится только на 8ой Label строчку
Пакетов: отправлено = 0, получено = 0, потеряно = 4
Спасибо заранее за любой ответ. Сорри, если вопрос нубский. Только осваиваю Делфи. Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.11.2012, 12:35
Ответы с готовыми решениями:

Ping
Есть код, но почему иногда пишет что пинг равен 0, из-за чего такое возникает? И почему даже, если...

Ping
Такой вопрос. Мне нужно написать программу что бы она проверяла пинг между двумя удаленными...

Ping адреса
Пытаюсь пингануть адрес следующим образом, с помощью IdIcmpClient...

Утилита ping (icmp)
Есть код, но в нем ошибки, не знаю как исправить. Вроде смотрю другие реализации в интернете и не...

0
03.11.2012, 12:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.11.2012, 12:35
Помогаю со студенческими работами здесь

Ping по кнопке адресов из БД
Есть бд ip адресов в аксесе нужно по кнопке пинговать нужный адрес

Ping в сети. Timeout
День добрый! Делаю для себя программку, которая по таймеру сканирует компьютеры в домене и...

Ping'ом модема и ресурса не работает
Всем привет. написал программу которая проверяет пинг и написав она полностью не работоспособна)...

Ping, или как узнать доступен ли хост?
Вообщем необходимо пропинговать несколько айпиадрессов. в идеале максимум 80 штук. получить от них...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru