Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

Ping с кривым руками:)   Найти похожие ветки 

 
AlexeyITN   (2004-03-17 15:45) [0]

вот работающий код:
---------------------------------------------------
type
User = record
  ComputerName :string;
  UserName :string;
  IpAdress :PAnsiChar;
end;
var
  User1:User;
  AllInformation:Array[0..11] of User;
  globalI:integer;
.....
begin
  wVersionRequested := MakeWord(1,1);
   error := WSAStartup(wVersionRequested,lwsaData);
   if (error <> 0) then
      begin
       Windows.MessageBox( 0, PChar("ERORR WSA"),"&#206;&#202;!",MB_OK or MB_ICONWARNING);
       WSACleanUp;
      end;
   FGetHostData:=AllocMem(MaxGetHostStruct);
WSAAsyncGetHostByName(Form1.Handle,GET_HOSTMESSAGE,PChar("AA"),FGetHostData,MAXGETHOSTSTRUCT);
WSAAsyncGetHostByName(Form1.Handle,GET_HOSTMESSAGE,PChar
...
("ZZ"),FGetHostData,MAXGETHOSTSTRUCT);
end;
---------------------
ловлю сообщениЯ от WSAAsyncGetHostByName-ов
----------------------
procedure TForm1.SOOB(var Msg: TMessage);
begin
If Msg.Msg = GET_HOSTMESSAGE Then
begin
User1.ComputerName:=PHostEnt(FGetHostData).h_name;
User1.IpAdress:=PHostEnt(FGetHostData).h_addr_list^;
AllInformation[globalI]:=User1;
Inc(globalI);
end;
-------------------
по идее я забиваю в массив рекордов IP и Name компов.
-------------------
If globalI = 10 then
      begin
         PING(@User1.IpAdress);
  //     PING(@(AllInformation[globalI].IpAdress));
      end;

function TForm1.PING(adrofcomp: pointer): boolean;
destAddress : In_Addr;
...
begin
destAddress := PInAddr(adrofcomp^)^;
IcmpSendEcho(hIP,destAddress.S_addr,@pingBuffer,            sizeof(pingBuffer),Nil,pIpe,sizeof(icmp_echo_reply) + sizeof(pingBuffer),1000);
end;
---------------
Вопрос: почему так работает, а когда я убираю комментарии перед
//PING(@(AllInformation[globalI].IpAdress)), то НЕТ?
да и вообще как "бороться" с PAnsiChar. Насколько я понимаю, это указатели на AnsiChar...и у меня получается массив указателей и  имён...
но почему AV?
Как запхнуть в массив IP-шники?
Заранее благодарен!


 
AlexeyITN   (2004-03-17 15:45) [0]

вот работающий код:
---------------------------------------------------
type
User = record
  ComputerName :string;
  UserName :string;
  IpAdress :PAnsiChar;
end;
var
  User1:User;
  AllInformation:Array[0..11] of User;
  globalI:integer;
.....
begin
  wVersionRequested := MakeWord(1,1);
   error := WSAStartup(wVersionRequested,lwsaData);
   if (error <> 0) then
      begin
       Windows.MessageBox( 0, PChar("ERORR WSA"),"&#206;&#202;!",MB_OK or MB_ICONWARNING);
       WSACleanUp;
      end;
   FGetHostData:=AllocMem(MaxGetHostStruct);
WSAAsyncGetHostByName(Form1.Handle,GET_HOSTMESSAGE,PChar("AA"),FGetHostData,MAXGETHOSTSTRUCT);
WSAAsyncGetHostByName(Form1.Handle,GET_HOSTMESSAGE,PChar
...
("ZZ"),FGetHostData,MAXGETHOSTSTRUCT);
end;
---------------------
ловлю сообщениЯ от WSAAsyncGetHostByName-ов
----------------------
procedure TForm1.SOOB(var Msg: TMessage);
begin
If Msg.Msg = GET_HOSTMESSAGE Then
begin
User1.ComputerName:=PHostEnt(FGetHostData).h_name;
User1.IpAdress:=PHostEnt(FGetHostData).h_addr_list^;
AllInformation[globalI]:=User1;
Inc(globalI);
end;
-------------------
по идее я забиваю в массив рекордов IP и Name компов.
-------------------
If globalI = 10 then
      begin
         PING(@User1.IpAdress);
  //     PING(@(AllInformation[globalI].IpAdress));
      end;

function TForm1.PING(adrofcomp: pointer): boolean;
destAddress : In_Addr;
...
begin
destAddress := PInAddr(adrofcomp^)^;
IcmpSendEcho(hIP,destAddress.S_addr,@pingBuffer,            sizeof(pingBuffer),Nil,pIpe,sizeof(icmp_echo_reply) + sizeof(pingBuffer),1000);
end;
---------------
Вопрос: почему так работает, а когда я убираю комментарии перед
//PING(@(AllInformation[globalI].IpAdress)), то НЕТ?
да и вообще как "бороться" с PAnsiChar. Насколько я понимаю, это указатели на AnsiChar...и у меня получается массив указателей и  имён...
но почему AV?
Как запхнуть в массив IP-шники?
Заранее благодарен!


 
Verg ©   (2004-03-17 16:55) [1]

Нда. И это называется "сети". :(


> да и вообще как "бороться" с PAnsiChar.


Так же как с Pchar, integer, и другими типами данных.

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

Ну да ладно, случай тяжелый, потому остановимся лишь на AV:


> If globalI = 10 then
>       begin
>          PING(@User1.IpAdress);
>   //     PING(@(AllInformation[globalI-1].IpAdress));
>       end;


Когда globalI = 10, то какой последний элемент AllInformation был заполнен?
Правильно, 9-ый! Так как....


> AllInformation[globalI]:=User1;
> Inc(globalI);


Как запихнуть, говоришь, IP адрес....

FGetHostData - Пусть это некий Pointer на блок памяти заполненный запроосм
WSAAsyncGetHostByName, тогда

PInteger(PHostEnt(FGetHostData)^.h_addr^)^ даст нам IP адрес.

и т.д.


 
Verg ©   (2004-03-17 16:55) [1]

Нда. И это называется "сети". :(


> да и вообще как "бороться" с PAnsiChar.


Так же как с Pchar, integer, и другими типами данных.

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

Ну да ладно, случай тяжелый, потому остановимся лишь на AV:


> If globalI = 10 then
>       begin
>          PING(@User1.IpAdress);
>   //     PING(@(AllInformation[globalI-1].IpAdress));
>       end;


Когда globalI = 10, то какой последний элемент AllInformation был заполнен?
Правильно, 9-ый! Так как....


> AllInformation[globalI]:=User1;
> Inc(globalI);


Как запихнуть, говоришь, IP адрес....

FGetHostData - Пусть это некий Pointer на блок памяти заполненный запроосм
WSAAsyncGetHostByName, тогда

PInteger(PHostEnt(FGetHostData)^.h_addr^)^ даст нам IP адрес.

и т.д.


 
AlexeyITN   (2004-03-17 17:32) [2]

PAnsiChar - это есть указатель...:)
и "по-моему" (я так думаю), если я его запихиваю в рекорд N раз...он указывает не на разные участки памяти(где и "сидит" AnsiChar), а на один и тот же(которой в конечном счёте и перезаписывается, столько раз, сколько приходит сообщение)...Или я не прав?

global-1 - это прошу прощения...не посмотрел-скопировал...(экспериментировал от безысходности)и забыл оставить мой прежний код...но AV не из-за него!

> стыдно сказать, программе

1. ну извините, что моя первая программа так выглядит...моё имя не Билли
2. попрошу без эмоций, не все здесь собрались Вашего уровня
3. Москва тоже не сразу строилась

Делал так:Сообщение получил и пропинговал, сл. сообщение и сл. пинг...Всё работало, НО..., одно НО

, но при условии что все компы включены. Если же один был выключен, например 5-ый, то после него 6 комп пробовался пинговать по адресу 5-ого, 7 и т.д. Почему? Я решил, что винда ждёт "какого-то" сообщения и потому не заполняет следующую структуру...

Тогда я решил, сначала собрать все АйПи-шники, а потом пинговать...всё сразу...

А вообще цель ставил такую: просмотреть все Ай Пишники...
а затем все их и пропинговать.


> Ну да ладно, случай тяжелый, потому остановимся лишь на
> AV:

см. пункт 1,2,3

Как бы там ни было, всё равно Вам благодарен за совет.


 
AlexeyITN   (2004-03-17 17:32) [2]

PAnsiChar - это есть указатель...:)
и "по-моему" (я так думаю), если я его запихиваю в рекорд N раз...он указывает не на разные участки памяти(где и "сидит" AnsiChar), а на один и тот же(которой в конечном счёте и перезаписывается, столько раз, сколько приходит сообщение)...Или я не прав?

global-1 - это прошу прощения...не посмотрел-скопировал...(экспериментировал от безысходности)и забыл оставить мой прежний код...но AV не из-за него!

> стыдно сказать, программе

1. ну извините, что моя первая программа так выглядит...моё имя не Билли
2. попрошу без эмоций, не все здесь собрались Вашего уровня
3. Москва тоже не сразу строилась

Делал так:Сообщение получил и пропинговал, сл. сообщение и сл. пинг...Всё работало, НО..., одно НО

, но при условии что все компы включены. Если же один был выключен, например 5-ый, то после него 6 комп пробовался пинговать по адресу 5-ого, 7 и т.д. Почему? Я решил, что винда ждёт "какого-то" сообщения и потому не заполняет следующую структуру...

Тогда я решил, сначала собрать все АйПи-шники, а потом пинговать...всё сразу...

А вообще цель ставил такую: просмотреть все Ай Пишники...
а затем все их и пропинговать.


> Ну да ладно, случай тяжелый, потому остановимся лишь на
> AV:

см. пункт 1,2,3

Как бы там ни было, всё равно Вам благодарен за совет.


 
Verg ©   (2004-03-18 08:19) [3]


> не посмотрел-скопировал...(экспериментировал от безысходности)и
> забыл оставить мой прежний код...но AV не из-за него!


Тогда возьми правильный исходник, а не то,...., что ты тут "накопировал" и разбирайся сам.


 
Verg ©   (2004-03-18 08:19) [3]


> не посмотрел-скопировал...(экспериментировал от безысходности)и
> забыл оставить мой прежний код...но AV не из-за него!


Тогда возьми правильный исходник, а не то,...., что ты тут "накопировал" и разбирайся сам.



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.043 c
3-1081854872
Andriano
2004-04-13 15:14
2004.05.09
1С-подобный генератор отчетов


1-1082430074
-Maximus-
2004-04-20 07:01
2004.05.09
PopupMenu


6-1079372447
leonidus
2004-03-15 20:40
2004.05.09
Для чего нужен компонет IdAntiFreeze?


7-1079882951
Wiz@rd
2004-03-21 18:29
2004.05.09
Injecting library


14-1082365331
АлексейК
2004-04-19 13:02
2004.05.09
Вот и верь теперь своим глазам.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский