Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.07.2010, 13:04
guranvir guranvir вне форума
Начинающий
 
Регистрация: 19.01.2010
Сообщения: 113
Репутация: 11
По умолчанию Не получается определить IP адрес узла

Вот код:
Код:
function lookupName(name:string):TInAddr;
procedure ShowWinSockError(FuncName:string);
 var
  Form1: TForm1;
implementation
////////////////////////////////////////////////////
procedure ShowWinSockError(FuncName:string);
var
sErorrString:String;
begin
sErorrString:='Неизвестная ошибка';
case WSAGetLastError() of
WSANOTINITIALISED:sErorrString:='Необходимо инициализировать WinSock';
WSAENETDOWN:sErorrString:='Проблема с сетью';
WSAEAFNOSUPPORT:sErorrString:='указанная система адресации не поддерживается';
WSAEINVAL:sErorrString:='сокет уже связан с адресом';
WSAENOBUFS:sErorrString:='недостаточно памяти';
WSAEPROTONOSUPPORT:sErorrString:='Протокол не поддерживается';
WSAENOTSOCK:sErorrString:='неверный дескриптор хендла';
WSAEISCONN:sErorrString:='сокет уже подключен';
WSAEMFILE:sErorrString:='больше нет доступных сокетов';
WSAEADDRINUSE:sErorrString:='адрес уже используется';
WSAEINPROGRESS:SErorrString:='Выполняется блокирующая операция WinSock 1.1';
WSAEADDRNOTAVAIL:SErorrString:='Адрес недоступен или неверен';
WSANO_DATA:SErorrString:='DNS не может выдать IP адресс узла!';
end;
MessageBox(0,Pchar('Ошибка в функции'+FuncName+'-'+SerorrString),'ошибка',0);
end;
/////////////////////////////////////////////////////////////////////////
{$R *.dfm}
 function lookupName(name:string):TInAddr;//получение адреса для
 //соединения
 var
 HostEnt:PHostEnt;
 InAddr:TInAddr;
 begin
 if name[4]='.' then//если точка после первых трем символов IP адрес 
 begin

  InAddr.S_addr:=inet_addr(PWideChar(name))
 end
 else
 begin
   HostEnt:=gethostbyname(PWideChar(name));


   FillChar(InAddr,sizeof(InAddr),0);
   if HostEnt<> nil then
   begin
   inaddr.S_un_b.s_b1:=ord(HostEnt^.h_addr^[0]);
    inaddr.S_un_b.s_b2:=ord(HostEnt^.h_addr^[1]);
    inaddr.S_un_b.s_b3:=ord(HostEnt.h_addr^[2]);
    inaddr.S_un_b.s_b4:=ord(HostEnt^.h_addr^[3]);
   end
   else
   begin
   ShowWinSockError(' GetHostbyName ');//Вот здесь все время вылетает
 //ошибка WSANO_DATA (код 11004)
   end;

 end;
 Result:=InAddr;
 end;
///////////////////////////////////////////////////////////
procedure TForm1.Button1Click(Sender: TObject);
var
info:TWSADATA;
hsocket:Thandle;
serv:sockAddr_in;
res:integer;
begin
 WSAStartup(MAKEWORD(2,0),info);

hsocket:=socket(PF_INET,SOCK_STREAM,IPPROTO_IP);
if hsocket=INVALID_SOCKET then
begin

ShowWinSockError('socket');
end
else
begin
serv.sin_family:=AF_INET;
serv.sin_port:=htons(80);
serv.sin_addr:=LookupName('google.ru');
res:=Connect(hsocket,@serv,sizeof(serv));
if res=SOCKET_ERROR then
begin

ShowWinSockError('Connect');
end;
CloseSocket(hsocket);
end
end;
Когда я читал ее(ошибка WSANO_DATA) описания говорится о том, что DNS не смотря на верный формат запроса не ожет выдать необходимые данные, однако pingуется одноименной утилитой Windows все на ура.В чем же проблема? Используется:
Winsock2
Delphi 2010
Windows Vista

Последний раз редактировалось guranvir, 03.07.2010 в 13:09.
Ответить с цитированием
  #2  
Старый 03.07.2010, 13:52
guranvir guranvir вне форума
Начинающий
 
Регистрация: 19.01.2010
Сообщения: 113
Репутация: 11
По умолчанию

что интересно: а Delphi 7 сборка пашет нормально%
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:17.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025