Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [C] Socket in C

  1. #1

    [C] Socket in C

    Ciao a tutti, avrei la necessità di controllare lo stato della connessione ad internet in C. Uso un sistema operativo Linux (Debian). Ho pensato di usare i socket, ma non li conosco bene e sto facendo fatica ad andare avanti. Mi basta solo verificare la connessione, non devo fare nient'altro. Se qualcuno può darmi una mano, o proporre qualche alternativa...

    Intanto ringrazio!
    seminate linux che windows si pianta da se

  2. #2

    [RISOLTO]

    Ho trovato la risposta, magari qualcuno ne avesse bisogno. Il codice per rilevare la connessione è il seguente:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    //"in" per "sockaddr_in"
    #include <netinet/in.h>
    //"netdb" per "gethostbyname"
    #include <netdb.h>
    //#include "main.h"
    
    
    void ChiudiSocket(int sock){
    	close(sock);
    	return;
    }
    
    
    int CreaSocket(char* Destinazione, int Porta){
    	struct sockaddr_in temp;
    	struct hostent *h;
    	int sock;
    	int errore;
    
    	//Tipo di indirizzo
    	temp.sin_family=AF_INET;
    	temp.sin_port=htons(Porta);
    	h=gethostbyname(Destinazione);
    	if (h==0){
    		printf("Gethostbyname fallito\n");
    		return -1;
    	}
    	printf("Gethostbyname Eseguito\n");
    	bcopy(h->h_addr,&temp.sin_addr,h->h_length);
    	//Creazione socket.
    	sock=socket(AF_INET,SOCK_STREAM,0);
    	//Connessione del socket. Esaminare errore per compiere relative azioni.
    	errore=connect(sock, (struct sockaddr*) &temp, sizeof(temp));
    	if (errore!=0){printf("Errore Ricevuto n: %d\n",errore);}
    	else {printf("Connessione presente\n");}
    	//Chiudo il socket.
    	ChiudiSocket(sock);
    	return errore;
    }
    
    int verificaSocket(){
    	  int errore=0;
    	  //Creo e connetto il socket
    	  errore=CreaSocket("208.69.34.231",80);	//www.google.it
    	  return errore;
    }


    se qualcuno vuole migliorare questo codice è sempre gradito...comunque funziona!
    seminate linux che windows si pianta da se

  3. #3
    Se l'host che hai indicato o il web server è down dovrebbe restituirti errore lo stesso, anche se la colpa non è tua.
    Premettendo che non ho mai affrontato l'argomento, per ottenere qualcosa del genere forse dovresti utilizzare i raw socket o la libreria Pcap.

  4. #4
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Ce un gethost... che ritorna il proprio IP. Forse se nn si è connessi potrebbe dare errori.
    Cmq la funzione contatta i servers dei nomi, quindi cmq fa quello che è stato postato.
    Per gli Spartani e Sparta usa spartan Il mio github

  5. #5
    quindi tu dice che con gethost ottengo l'indirizzo IP? potresti farmi un esempio di come usarlo?
    seminate linux che windows si pianta da se

  6. #6
    Se ti interessa ci sono 2 ottimi libri che riguardano la programmazione di socket BSD..
    Unix Network Programming & Defintive Guide to Linux Network Programming
    Ciascuno dei 2 va bene, anche se il secondo è più "completo e profondo"..

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.