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

Вниз

Как получить IP адрес компьютера?   Найти похожие ветки 

 
Z   (2002-01-04 23:40) [0]

(для Dialup) Пожалуйстаб кусок кода. Очень нужно! Пробовал компонентыб но это привело к тому, что моя программа висла примерно каждые 3 мин... :-(


 
Snake2000   (2002-01-05 12:20) [1]

Попробуй так:


var
WSAData : TWSAData;
p : PHostEnt;
Name : array [0..$FF] of Char;

WSAStartup($0101, WSAData);
GetHostName(name, $FF);
p := GetHostByName(Name);
ShowMessage("Your IP is : ",inet_ntoa(PInAddr(p.h_addr_list^)^));
WSACleanup;


Или так:


function LocalIP:string;
type
TaPInAddr=array [0..10] of PInAddr;
PaPInAddr=^TaPInAddr;
var
phe:PHostEnt;
pptr:PaPInAddr;
Buffer:array [0..63] of char;
I:Integer;
GInitData:TWSADATA;
begin
WSAStartup($101, GInitData);
Result:="";
GetHostName(Buffer, SizeOf(Buffer));
phe:=GetHostByName(buffer);
if phe=nil then Exit;
pptr:=PaPInAddr(Phe^.h_addr_list);
I:=0;
while pptr^[I] <> nil do
begin
result:=StrPas(inet_ntoa(pptr^[I]^));
Inc(I);
end;
WSACleanup;
end;






 
Z   (2002-01-05 17:28) [2]

спасибо, конечно...
Но ни то ни другое не работает - что в uses на до писать?
А первый пример я вообще не понял - это функция или что? Почему Var есть, begin"а с end"ом - нету?

Причем в Faq почему то тоже что-то подобное пишут...
Я думал это вопрос простой...

Ну ладноб может какой профи ответит...
Всем заранее спасибочки!


 
Snake2000   (2002-01-05 18:00) [3]

Да...... Не ожидал..... А так сойдет?
Код загоняется в любую процедуру или функцию:


var
WSAData : TWSAData;
p : PHostEnt;
Name : array [0..$FF] of Char;
begin
WSAStartup($0101, WSAData);
GetHostName(name, $FF);
p := GetHostByName(Name);
ShowMessage("Your IP is : ",inet_ntoa(PInAddr(p.h_addr_list^)^));
WSACleanup;
end;


Ну, очевидно же, что в uses надо добавить Winsock :)))))) Ну ты даешь !! :))))) На Новый Год перепил что ли...
Порылся бы по форуму, там подобных вопросов уйма...
Оба примера у меня отлично работают, и не мне приводить тебе код готового модуля.


 
Z   (2002-01-06 17:39) [4]

Я попробовал второй пример, заработало, но прога все-равно виснет... На сколько я понимаю в этом виноват в основном мой провайдер, но как мне это обойти??? Ведь я думал, программе не надо посылать запрос к провайдеру, типа: "Скажите, пожалуйста, а какой у меня IP?" Это и на компе должно как то сохраняться...

А может там куда-нибудь Application.ProcessMessages впиндюрить?

А на счет uses, извини, не знал. Я с интернет-приложениями в первый раз связался, вот и получается такая дремучесть...

А новый пример сейчас опробую...


 
Z   (2002-01-06 18:36) [5]

Новый пример:
Вставляю в процедуру... получаю:
[Error] manageru.pas(176): Too many actual parameters


Убирaю ShowMessage... на...
form1.currentip:=ipinet_ntoa(PInAddr(p.h_addr_list^)^);

Получаю:
[Error] manageru.pas(165): Undeclared identifier: "ipinet_ntoa"

Winsock в uses стоит.
Что я делаю не так?
(Delphi5)


 
Z   (2002-01-06 22:57) [6]

Появилась такая идея:

надо сделать второй exe, который будет заниматься только отслеживанием IP. И при изменении IP будет посылать моей программе некое сообщение, содержащее новый IP. Тогда зависать
будет не главная программа, а только IP-Отслеживатель и пользователь этого никак не заметит.

Но вот только как реализовать это самое сообщение???
Если кто знает, помогите!!! Очень прошу!


 
Knight   (2002-01-07 09:28) [7]

Недавно человек тоже искал по ИП. В поиске нашлось всё необходимое...


 
Red Alert   (2002-01-07 09:41) [8]

Попробуй...


uses
Windows, SysUtils;
Const
RAS_MaxIpAddress = 15;
RAS_MaxDeviceType = 16;
RAS_MaxEntryName = 256;
RAS_MaxDeviceName = 128;

type
TRASPPPIP = record
dwSize : DWORD;
dwError : DWORD;
szIpAddress : array [0..RAS_MaxIpAddress] of char;
end;

THRASCONN = THandle;
TRASCONN = packed record
dwSize : DWORD;
hRasConn : THRASCONN;
szEntryName : array [0..RAS_MaxEntryName] of char;
{$IFDEF WINVER400}
szDeviceType : array [0..RAS_MaxDeviceType] of char;
szDeviceName : array [0..RAS_MaxDeviceName] of char;
{$ENDIF}
szPadding : array [0..0] of Char;
end;



function RasGetIPAddress: string;
var
RASConns : TRasConn;
dwSize : DWORD;
dwCount : DWORD;
RASpppIP : TRASPPPIP;
begin
Result := "";
RASConns.dwSize := SizeOf(TRASConn);
RASpppIP.dwSize := SizeOf(RASpppIP);
dwSize := SizeOf(RASConns);
if RASEnumConnectionsA(@RASConns, @dwSize, @dwCount) = 0 then begin
if dwCount > 0 then begin
dwSize := SizeOf(RASpppIP);
RASpppIP.dwSize := SizeOf(RASpppIP);
if RASGetProjectionInfoA(RASConns.hRasConn,
RASP_PppIp,
@RasPPPIP,
@dwSize) = 0 then
Result := StrPas(RASpppIP.szIPAddress);
end;
end;
end;



 
Z   (2002-01-07 18:36) [9]

to Red_Alert:
Спасибо! Вечером сегодня попробую - о результатах напишу.
А все-таки, может кто знает про exe-шники?

Еще раз спасибо всем!


 
Z   (2002-01-07 22:57) [10]

Вот мне кто-нибудь объяснить может, почему почти все посланные мне примеры не работают? Может у меня Дельфи не такая какая-нибудь (стоит Delphi5)?

У вас то они работают?
Или я что-то не понимаю?

Что я не так делаю-то?
Плиз, Хелп!

to Red_Alert:
[Error] Unit2.pas(43): Undeclared identifier: "RASEnumConnectionsA"


 
Ghost.   (2002-01-08 09:08) [11]

Ну уж не знаю, что и сказать-то тебе.Первый пример у меня точно работает и уже давольно давно. Причем он вставден в прогу которая кроме этого много че делает и ни одного зависания получено небыло...вот, что тебе посоветовать....


 
Shrek   (2002-01-27 21:15) [12]

Удалено модератором


 
Anatoly Podgoretsky   (2002-01-28 10:04) [13]

Z (07.01.02 22:57)
Судя по диагностике, это ты не то делаешь, у тебя не указан модуль, в котором прописан "RASEnumConnectionsA", а может и вообще отсутствует.



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

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

Наверх





Память: 0.48 MB
Время: 0.009 c
4-33002
Demn
2002-02-07 12:16
2002.04.11
Process ID


14-32939
vbazik
2002-03-02 01:47
2002.04.11
Совет по DualHeard video


6-32931
bg8
2002-01-23 18:38
2002.04.11
TCustomWinSocket


4-33029
MCi
2002-02-07 09:19
2002.04.11
Как получить права на действия в W2k


6-32933
Ivanov Vova
2002-01-22 15:41
2002.04.11
Мастера, помогите ламеру, плз.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский