Форум: "Сети";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];
ВнизNETBIOS и IP Найти похожие ветки
← →
masqito © (2004-09-02 20:33) [0]Подскажите пожалуйса, как зная NETBIOS имя получить IP адрес.
GetHostByName не устраивает тем что для его использования необходима переменная типа PHostEnt, а со String что то не получается.
← →
Rouse_ © (2004-09-02 21:59) [1]Не понял, а чем PHostEnt не устраивает?
← →
VID © (2004-09-03 00:03) [2]Rouse_ © (02.09.04 21:59) [1]
Ну как чем ! Она ж со стрингом не совместима ! ;)))
← →
Дмитрий Ботвин (2004-09-03 08:02) [3]Что значит: "...Она ж со стрингом не совместима!".
О какой несовместимости идёт речь?????
Вот нужный тебе код:
function HostToIP(Name: string): string;
var
WSAData: TWSAData;
hostEnt: PHostEnt;
addr: PChar;
begin
Result:="";
WSAStartup($0101,WSAData);
try
hostEnt:=gethostbyname(PChar(Name));
if Assigned(hostEnt) then
if Assigned(hostEnt^.h_addr_list) then
begin
addr:=hostEnt^.h_addr_list^;
if Assigned(addr) then
Result:=Format("%d.%d.%d.%3.3d",[byte(addr[0]),byte(addr[1]),byte(addr[2]),byte(addr[3])]);
end;
finally
WSACleanup
end
end;
← →
Дмитрий Ботвин (2004-09-03 08:07) [4]Получишь IP в виде 192.168.222.010 c приоритетными нулями, т.е
можешь потом сортировать их и IP сортируются корректно в виде
192.168.222.010
192.168.222.011
.
.
.
.
192.168.222.141
а не как обычные строки при посимвольном сравнении
← →
Verg © (2004-09-03 09:25) [5]Будь поосторожнее с приоритетными нулями в IP адресах
Такая ф-ция, как inet_addr() воспримет это как признак, что соотв. часть IP адрес задана в восмиричном виде.
Т.о., что
S := "192.168.222.010";
sin.sin_addr.S_addr := inet_addr(pchar(S));
вернет адрес 192.168.222.8
← →
masqito © (2004-09-04 09:48) [6]Большое спасибо за помощь.
У меня вопрос по последнему комментарию. Как всё таки перевести адрес с приоритетными нулями в обычный вид (т.е 192.168.0.002 в 192.168.0.2). Редактирование стрингов не получается т.к. замещение .0 на . может не пройти в случае с 192.168.0.002 -> 192.168..02.
← →
Дмитрий Ботвин (2004-09-04 13:05) [7]В моём примере замени Result=.... на
Result:=Format("%d.%d.%d.%d",[byte(addr[0]),byte(addr[1]),byte(addr[2]),byte(addr[3])]) и всё. Приоритетные нули я добавил
для удобства сортировки ...
← →
VID © (2004-09-04 13:18) [8]masqito © (04.09.04 9:48) [6]
Да неужели это проблема то ? Мне б твои проблемы :)
procedure TForm1.Button1Click(Sender: TObject);
var i,n,l:integer;
s1,s2,c:string;
procedure _add;
begin
s2 := s2 + inttostr(strtoint(c));
if I<L then s2 := s2 + ".";
c := "";
end;
begin
s1 := "198.162.001.015";s2:="";
l := length(s1);
for i := 1 to l do
if s1[i]<>"." then c:=c+s1[i] else _add;
_add;
showmessage(s2);
end;
Добавь там try except end если твой s1 не такой уж надёжный...
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.034 c