Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

узнать IPадрес [D6, Win95/98]


Ильдар ©   (2002-07-18 13:55:00) 

как узнать IPадрес


Anatoly Podgoretsky   (2002-07-19 09:02:00) [1]

Оповещение неизвестных компьютеров лучше делать широковещальном режиме, без всякого знания их адресов и состояния


Digitman   (2002-07-19 08:40:00) [2]

Ну вот теперь понятна задача твоя.

Что ж, вариант от <Beekeeper> вполне подойдет.
Чуть "причешу" его только :

Function GetComputerHost:String;
var
WSAData : TWSAData;
p : PHostEnt;
Name : array [0..$FF] of Char;
begin
if WSAStartup($0101, WSAData) <> 0 then;
try
GetHostName(name, $FF);
p := GetHostByName(Name);
Result:=inet_ntoa(PInAddr(p.h_addr_list^)^);
finally
WSACleanup;
end;
end;


P.S.
Ты задумывался над проблемой, могущей возникнуть в многократно повторяющейся ситуации :

1. Клиент зафиксировал свой локальный IP в таблице и подтвердил транзакцию.

2. И завис... Или физически "оторвался", не уничтожив в таблице заведенную им запись.

3. Другой клиент раз за разом в процессе собственных изменений пытается отослать извещение уже несуществующему клиенту.

?


easy   (2002-07-18 19:44:00) [3]

...как на Delphi - не знаю, знаю как на VB, может поможет:

Public Function ConvertAddressToString(longAddr As Long) As String
Dim myByte(3) As Byte
Dim Cnt As Long
CopyMemory myByte(0), longAddr, 4
For Cnt = 0 To 3
ConvertAddressToString = ConvertAddressToString + CStr(myByte(Cnt)) + "."
Next Cnt
ConvertAddressToString = Left$(ConvertAddressToString, Len(ConvertAddressToString) - 1)
End Function

Public Sub GetIP()
Dim Ret As Long, Tel As Long
Dim bBytes() As Byte
Dim Listing As MIB_IPADDRTABLE

Form1.Text1 = ""

On Error GoTo END1
GetIpAddrTable ByVal 0&, Ret, True

If Ret


Ильдар   (2002-07-18 18:52:00) [4]

>Digitman

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


Digitman   (2002-07-18 18:47:00) [5]

>Ильдар

Значит, сервера нет, как я понял ?
А как ты хочешь известить в этом случае иные приложения на иных компьютерах, если ни одно приложение не знает не только своего IP-адреса, но и IP-адресов тех компьютеров, которым потребуется рассылать извещения ?

Здесь есть два варианта :

- координатор в виде некоего сервера с постоянным (и известным клиентам) IP-адресом таки должен существовать;

- если нет возможности координинации средствами сервера, придется исаользовать broadcast-сообщения; либо с использованием существующих возможностей UDP-протокола либо "слепым" перебором всего диапазона IP-адресов в ЛВС


Ильдар   (2002-07-18 18:38:00) [6]

>Digitman
Приложение должно оповестить точно такие же приложения (копии) о некотором событии (необходимости Refresh"a)


Digitman   (2002-07-18 18:31:00) [7]

>Ильдар

Т.е. есть некий App-сервер, которому клиент должен при коннекте сообщить свой IP с тем, чтобы при успешной транзакции, выполненной данным клиентом, извещения обо всех изменениях в рамках этой транзакции сервер разослал другим клиентам, сопроводив их IP-адресом клиента, их выполнивших ? Так ?


Ильдар   (2002-07-18 18:20:00) [8]

Мне это надо для того, чтобы при изменениях в БД, сделанных на одной машине, база с этими обновлениями сразу же отображалась на машинах остальных пользователей.


Digitman   (2002-07-18 18:15:00) [9]

>Ильдар

У машины, на которой запущено приложение, может быть и не один IP-адрес. Тебе для каких целей нужно это ?

P.S. Winsock(2).pas в USES подключил ? Или грузишь WS2_32.DLL динамически ?


Ильдар   (2002-07-18 17:40:00) [10]

>Digitman машины, на которой запущено приложение
>BeeKeeper на первой же строке WSAStartup($0101, WSAData);возникает AV


Beekeeper   (2002-07-18 14:27:00) [11]

Function GetComputerHost:String;
var
WSAData : TWSAData;
p : PHostEnt;
Name : array [0..$FF] of Char;
begin
WSAStartup($0101, WSAData);
GetHostName(name, $FF);
p := GetHostByName(Name);
Result:=inet_ntoa(PInAddr(p.h_addr_list^)^);
end;


Digitman   (2002-07-18 14:00:00) [12]

Чей ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо