Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [C/Socket] Host ip

  1. #1

    [C/Socket] Host ip

    C'e' qualche funzione che permette di trovare l'ip di un server avendo il nome ???

    Cioe' ho il nome del server (es. html.it) mi serve l'ip...

    Grazie.
    PoWered by:
    Gentoo 1.5.3 - Kernel 2.6.7
    Debian Sid - Kernel 2.6.7 - Bash 3.0
    Slackware current - Kernel 2.6.7

  2. #2
    Utente di HTML.it L'avatar di /dev/null
    Registrato dal
    May 2004
    Messaggi
    1,936
    Dovrebbe fare al caso tuo la funzione inet_addr



    codice:
    #include <arpa/inet.h>
    
    in_addr_t inet_addr(const char *strptr)
        // Converte la stringa dell'indirizzo dotted decimal in nel numero IP in network order.
    
    int inet_aton(const char *src, struct in_addr *dest)
        // Converte la stringa dell'indirizzo dotted decimal in un indirizzo IP.
    
    char *inet_ntoa(struct in_addr addrptr)
        // Converte un indirizzo IP in una stringa dotted decimal. 
    
        // Tutte queste le funzioni non generano codice di errore.


    http://www.lilik.it/~mirko/gapil/gapilsu219.html







    PS: Mi e' sembrato di capire da qualche tuo post che stai tentando di realizzare un web browser...
    Io invece sto provando a fare un web server... Che ne dici se collaborassimo?
    Ultima modifica ad opera dell'utente /dev/null il 01-01-0001 alle 00:00

  3. #3
    C'e' qualche funzione che permette di trovare l'ip di un server avendo il nome ???

    Cioe' ho il nome del server (es. html.it) mi serve l'ip...
    Se ho capito bene ti serve la stessa cos ache è servita a me giusto avantieri.Io ho risolto il problema a questo modo:

    codice:
      WORD wVersionRequested = MAKEWORD(1,1);
    	WSADATA wsaData;
    	CString szSite, szBuf;
    
    	m_ctrlSite.GetWindowText(szSite);
    	m_ctrFoundIPs.ResetContent();
    
    	//La casella era vuota
    	if(szSite.IsEmpty())
    	{
    		AfxMessageBox("Non hai specificato alcun sito");
    		return;
    	}
    
    	//Inizial l'uso di Ws2_32.dll da parte del prog e ne "negozia"
    	//la versione
    	if(WSAStartup( wVersionRequested, &wsaData ) != 0)
    	{
    		AfxMessageBox("Impossibile trovare una dll Winsock adatta");
    		WSACleanup();
    		return;
    	}
    
    	//Test sullo stato della conessione (evita l'apertura) di
    	//quella fastidiosa finestra di connessione a ogni pressione del
    	//pulsante.
    	LPDWORD lpdwFlags = NULL;
    	if(!InternetGetConnectedState(lpdwFlags,0))
    	{
    		AfxMessageBox("E' necessaria una connessione attiva\nper questa funzione");
    		return;
    	}
    		
    	//Puntatore a una struttura che riceverà i dati
    	hostent *host;
    	//Ricava le informazioni richieste da un database di host
    	host = gethostbyname(LPCSTR(szSite));
    	//Fallimento
    	if(!host)
    	{		m_ctrFoundIPs.AddString("Impossibile trovare un IP");
    		WSACleanup();
    		return;
    	}
    	//Indirizzo non IPv4
    	if(host->h_length != 4)
    	{
    		AfxMessageBox("Indirizzo di tipo non supportato");
    		WSACleanup();
    		return;
    	}
    	//Aggiunge alla lista gli IP trovati
    	flag = FALSE;
    	for(int i = 0; host->h_addr_list[i]; i++)
    	{
    		szBuf.Format("%s",inet_ntoa(*( (struct in_addr *)host->h_addr_list[i])));
    		flag = TRUE;
    		m_ctrFoundIPs.AddString(szBuf);	
    	}
    	//Termina l'uso di Ws2_32.dll.
    	WSACleanup();
    Si tratta del codice di un metodo di una classe MFC quindi se non stai programmando con questo framework dovrai fare i dovuti adattamenti,ad esempio printf o messagebox al posto di afxmessagebox,tuttavia funge.Il codice prende da una casella di testo la stringa rappresnatnte il nome del sito, controlla se è vuota,controlla se esiste una connessione attiva e se tutto ciò non è ricava tutti gli indirizzi IP associati a tale nome (possono essere più d'uno) e li inserisce in un controllo lista.
    Credo dovrai includere gli header wininet.h e winsock2.h.
    Funziona bene,l'ho provato
    Spero di esserti stato utile,ciao
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.