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

Вниз

узнать 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 вся ветка

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

Наверх





Память: 0.47 MB
Время: 0.007 c
4-27280
LordOfSilence
2002-07-19 13:02
2002.09.09
Изменить заголовок окна после ShellExecute


3-26898
Sergey V. Shadrin
2002-08-19 09:22
2002.09.09
данные


1-27003
Lord_BTR
2002-08-20 15:42
2002.09.09
Создание Help-файлов


14-27157
Vasso
2002-08-06 11:20
2002.09.09
Отношение к WinXp


1-26968
АлексейТр
2002-08-27 09:13
2002.09.09
Как в DateTimePicker всегда выводить текущую дату?





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