Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.09;
Скачать: CL | DM;

Вниз

узнать IPадрес   Найти похожие ветки 

 
Ильдар   (2002-07-18 13:55) [0]

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


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

Чей ?


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

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;


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

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


 
Digitman ©   (2002-07-18 18:15) [4]

>Ильдар

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

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


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

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


 
Digitman ©   (2002-07-18 18:31) [6]

>Ильдар

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


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

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


 
Digitman ©   (2002-07-18 18:47) [8]

>Ильдар

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

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

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

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


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

>Digitman

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


 
easy ©   (2002-07-18 19:44) [10]

...как на 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 <= 0 Then Exit Sub
ReDim bBytes(0 To Ret - 1) As Byte
"retrieve the data
GetIpAddrTable bBytes(0), Ret, False

"Get the first 4 bytes to get the entry"s.. ip installed
CopyMemory Listing.dEntrys, bBytes(0), 4
"MsgBox "IP"s found : " & Listing.dEntrys => Founded ip installed on your PC..
Form1.Text1 = Listing.dEntrys & " IP addresses found on your PC !!" & vbCrLf
Form1.Text1 = Form1.Text1 & "----------------------------------------" & vbCrLf
For Tel = 0 To Listing.dEntrys - 1
"Copy whole structure to Listing..
" MsgBox bBytes(tel) & "."
CopyMemory Listing.mIPInfo(Tel), bBytes(4 + (Tel * Len(Listing.mIPInfo(0)))), Len(Listing.mIPInfo(Tel))
Form1.Text1 = Form1.Text1 & "IP address : " & ConvertAddressToString(Listing.mIPInfo(Tel).dwAddr) & vbCrLf
Form1.Text1 = Form1.Text1 & "IP Subnetmask : " & ConvertAddressToString(Listing.mIPInfo(Tel).dwMask) & vbCrLf
Form1.Text1 = Form1.Text1 & "BroadCast IP address : " & ConvertAddressToString(Listing.mIPInfo(Tel).dwBCastAddr) & vbCrLf
Form1.Text1 = Form1.Text1 & "**************************************" & vbCrLf
Next

"MsgBox ConvertAddressToString(Listing.mIPInfo(1).dwAddr)
Exit Sub
END1:
MsgBox "ERROR"
End Sub

исходник + exe:
http://easy-.pisem.net/files/Get_IP_Addres.zip


 
Digitman ©   (2002-07-19 08:40) [11]

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

Что ж, вариант от <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. Другой клиент раз за разом в процессе собственных изменений пытается отослать извещение уже несуществующему клиенту.

?


 
Anatoly Podgoretsky ©   (2002-07-19 09:02) [12]

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



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

Текущий архив: 2002.09.09;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
4-27272
Rash
2002-07-18 00:16
2002.09.09
CreateProcess и Winexec при работе с консольным приложением.


1-26953
Карлсон
2002-08-28 13:01
2002.09.09
Как сравнить два текста?


3-26885
XanderMan
2002-08-18 15:27
2002.09.09
Как заставить работать FoxPro 2.6a под Win2k


3-26876
RDA
2002-08-18 14:57
2002.09.09
Клиент-серверное програмирование. Вкусно - но...


14-27162
Alx2
2002-08-13 14:17
2002.09.09
Прическа для кода