Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[WinSock, C++] gethostbyname(); - Tylko Google ?

Ostatnio zmodyfikowano 2013-01-08 19:03
Autor Wiadomość
krystian11102
Temat założony przez niniejszego użytkownika
[WinSock, C++] gethostbyname(); - Tylko Google ?
» 2013-01-05 09:29:06
Witam. Napisałem sobię programik sprawdzający ip... Gdy chcę użyć gethostbyname(tu_string);
wyskakuje "Aplikacja przestała działać" ... Oczywiście gdy wpiszę google.com to działa, gdy drugi raz chcem wpisać np. wp.pl to wyskakuje "Aplikacja blablabla" .. :) Co co może chodzić ?..
P-73004
xevuel
» 2013-01-05 09:49:23
Kod.
P-73005
krystian11102
Temat założony przez niniejszego użytkownika
» 2013-01-05 09:57:28
C/C++
#include <winsock2.h>
#include <ws2tcpip.h>
#include <windows.h>
#include <string>
#include <iostream>
#include <fstream>
#pragma comment(lib, "ws2_32.lib")
using namespace std;
int main()
{
    for(;; )
    {
        WSADATA wsaData;
        int i = 0;
        struct hostent * remoteHost;
        struct in_addr addr;
        string adres;
        cout << "Wpisz Adres: ";
        cin >> adres;
        WSAStartup( MAKEWORD( 2, 2 ), & wsaData );
        cout << endl << "Laczenie z hostem... (" << adres << ")";
        remoteHost = gethostbyname( adres.c_str() );
        addr.s_addr = *( u_long * ) remoteHost->h_addr_list[ ++i ];
        cout << endl << "Adres IP Hosta: " << inet_ntoa( addr );
        system( "pause" );
        system( "cls" );
    }
}
P-73006
crash
» 2013-01-05 09:59:51
MSDN: "Note  The gethostbyname function has been deprecated by the introduction of the getaddrinfo function. Developers creating Windows Sockets 2 applications are urged to use the getaddrinfo function instead of gethostbyname."

http://msdn.microsoft.com/en-us/library/windows/desktop/ms738524(v=vs.85).aspx

Pokaż koda, inaczej ciężko cokolwiek wywnioskować ;>

P-73007
krystian11102
Temat założony przez niniejszego użytkownika
» 2013-01-05 10:01:38
Pokazałem :D
P-73008
xevuel
» 2013-01-05 10:07:24
Nie sprawdzasz, czy remoteHost nie jest równy NULL i zupełnie bez sensu inkrementujesz i:
addr.s_addr = *( u_long * ) remoteHost->h_addr_list[ ++i ];


@crash,
Zapoznaj się z tym: » KursyKurs STC kurs
P-73009
krystian11102
Temat założony przez niniejszego użytkownika
» 2013-01-05 10:13:58
Właśnie to zrobiłem... Ale niestety, "Aplikacja przestała działać" a gdy uruchamiam przez kompilacje i w trakcie działania programu to ... "Unhandled exception at 0x01117 in winsock.exe: 0xC0000005: Access violation reading location 0x00000000."
I wskazuje na linijkę:
C/C++
addr.s_addr = *( u_long * ) remoteHost->h_addr_list[ ++i ];
....
P-73010
crash
» 2013-01-05 10:14:46
xevuel@ spoko, zerknę zaraz,

Krystian22201@ xevuel ma rację - brak sprawdzenia czy nie jest null, oraz całkiem niepotrzebna inkrementacja - program wysypuje się z kodem błędu oznaczającym wyjście poza tablicę lub nieprawidłową operacją na wskaźnikach.

edit: Zapoznaj się z linkiem, który podrzuciłem wcześniej. Microsoft zaleca używania innego sposobu, gdyż ten uważa za przestarzały.
P-73011
« 1 » 2
  Strona 1 z 2 Następna strona