![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Вот код:
Код:
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; Winsock2 Delphi 2010 Windows Vista Последний раз редактировалось guranvir, 03.07.2010 в 13:09. |