Accedi

Ho dimenticato la password

Ultimi argomenti
» argomento
PROGRAMMA : Utilizzo socket per creazione di un Server EmptyDom Giu 02, 2013 4:30 pm Da ruggiero98

» problema con la funzione SE aiutoooo x favore?????
PROGRAMMA : Utilizzo socket per creazione di un Server EmptyDom Giu 02, 2013 4:18 pm Da ruggiero98

» aiuto in programma con if
PROGRAMMA : Utilizzo socket per creazione di un Server EmptyDom Mag 26, 2013 5:39 pm Da ruggiero98

»  CALCOLO PERCENTUALE IN C
PROGRAMMA : Utilizzo socket per creazione di un Server EmptySab Apr 20, 2013 8:22 pm Da ruggiero98

» Costruire un temporizzatore software per accensione luci a led
PROGRAMMA : Utilizzo socket per creazione di un Server EmptyLun Mar 25, 2013 2:34 pm Da Cristina Shady

» Ciao a tutti!
PROGRAMMA : Utilizzo socket per creazione di un Server EmptyGio Mar 22, 2012 4:19 am Da cosmos91

» Virtualbox VS le periferiche USB
PROGRAMMA : Utilizzo socket per creazione di un Server EmptyMar Apr 06, 2010 1:49 pm Da dandeciani

» PROGRAMMA: BINARY CODE
PROGRAMMA : Utilizzo socket per creazione di un Server EmptyMar Dic 23, 2008 7:28 pm Da Thalionwen

» saluti a tutti
PROGRAMMA : Utilizzo socket per creazione di un Server EmptyMar Dic 23, 2008 7:12 pm Da Thalionwen

» GUIDA : CAP 1 LEZIONE 1 Elementi di base dei programmi in C [Prima Parte]
PROGRAMMA : Utilizzo socket per creazione di un Server EmptySab Nov 29, 2008 11:44 am Da ya89

» un semplice ciao
PROGRAMMA : Utilizzo socket per creazione di un Server EmptySab Nov 29, 2008 11:38 am Da ya89

» Aiuto per alice 7 mega
PROGRAMMA : Utilizzo socket per creazione di un Server EmptyVen Nov 14, 2008 4:03 pm Da root

» FORUM: I nuovi banner
PROGRAMMA : Utilizzo socket per creazione di un Server EmptyVen Nov 14, 2008 2:48 pm Da Thalionwen

» Zooming Ricorsivo, questo sconosciuto.
PROGRAMMA : Utilizzo socket per creazione di un Server EmptyVen Nov 14, 2008 2:43 pm Da Thalionwen

» GUIDA : LEZIONE 4 : UTILIZZARE GLI ARRAY IN C#
PROGRAMMA : Utilizzo socket per creazione di un Server EmptyVen Nov 14, 2008 1:54 pm Da ab89

» GUIDA : CAP 1 LEZIONE 1 Elementi di base dei programmi in C [Terza e Ultima Parte]
PROGRAMMA : Utilizzo socket per creazione di un Server EmptyVen Nov 14, 2008 12:41 am Da ab89

» GUIDA : CAP 1 LEZIONE 1 Elementi di base dei programmi in C [Seconda Parte]
PROGRAMMA : Utilizzo socket per creazione di un Server EmptyMer Nov 12, 2008 12:59 am Da ab89

» [PS2] Dark Cloud
PROGRAMMA : Utilizzo socket per creazione di un Server EmptyMar Nov 11, 2008 6:50 pm Da ab89

» [PC] Sacred 2
PROGRAMMA : Utilizzo socket per creazione di un Server EmptyLun Nov 10, 2008 10:49 pm Da ab89

» GUIDA : CAP 1 LEZIONE 3 INTRODUZIONE AGLI ARRAY
PROGRAMMA : Utilizzo socket per creazione di un Server EmptyLun Nov 10, 2008 1:37 pm Da ab89

Flusso RSS


Yahoo! 
MSN 
AOL 
Netvibes 
Bloglines 



PROGRAMMA : Utilizzo socket per creazione di un Server

Andare in basso

PROGRAMMA : Utilizzo socket per creazione di un Server Empty PROGRAMMA : Utilizzo socket per creazione di un Server

Messaggio Da ab89 il Sab Ott 25, 2008 4:05 pm

Dato che l'argomento è abbastanza vasto tralascio la parte di spiegazione su socket e server per illustrare il codice

A livello logico, per creare un'applicazione di questo tipo si applica il seguente schema :


  1. CREAZIONE SOCKET IN ASCOLTO SU UNA PORTA
  2. ATTESA SOCKET IN INGRESSO
  3. SE SOCKET IN INGRESSO
  4. LETTURA MESSAGGIO
  5. SE NON CI SONO ERRORI SI SCRIVE IL MESSAGGIO
  6. RITORNO IN FASE DI ATTESA
  7. INFINE AL TERMINE DEL PROGRAMMA CHIUSURA SOCKET
Ovviamente i 7 punti sopra indicati sono di esempio ma secondo me chiariscono il concetto.

Nel codice oltre al main() sono presenti altre 2 funzioni :

  • f_create_socket(int port)
  • f_close_socket(int sock)
La prima serve per creare un socket in ascolto sulla porta numero port (nel codice è 1800) in questo modo viene analizzato tutto il flusso (STREAM) in ingresso da quella porta.

La seconda serve per chiudere un socket aperto.

Il codice segue la logica applicata precedentemente :
Per prima cosa crea un socket in ascolto alla porta 1800.
In seguito tramite un ciclo while resta in attesa fintanto che non viene rilevato un socket in ingresso.
Esso viene accettato.
Viene letto il messaggio.
Infine viene chiuso il socket in ingresso
Successivamente viene verificato il messaggio inviato, se il messaggio è exit il programma termina, altrimenti
viene stampato a video il messaggio ricevuto.

Codice:

#include <sys/types.h>
#include <sys/socket.h>
//"in" per "sockaddr_in"
#include <netinet/in.h>
//"fcntl" per la funzione "fcntl"
#include <fcntl.h>
#include <stdio.h>

int f_create_socket (int port);
void f_close_socket (int sock);

main()
{
    char buffer[512];
   
    //indicano i socket utilizzati
    //socket_listener : rappresenta il sistema (127.0.0.1)
    //socket_applicant : rappresenta il socket che invia il messaggio
    int socket_listener, socket_applicant;
   
    int dim_buffer;
    int eol = 0; //end of listening (fine di "ascolto")
   
    //creazione socket sul quale ascoltare
    socket_listener = f_create_socket (1800);
   
    printf("Server in attesa ...\n");
   
    while (!eol){
       
        //int accept (int socket, struct sockaddr *addr, socklen_t *length_ptr)
        if ((socket_applicant = accept(socket_listener, 0, 0)) != -1){
            if ((dim_buffer = read(socket_applicant, buffer, sizeof(buffer))) < 0 ){
                printf("Impossibile leggere il messaggio\n");
                f_close_socket(socket_applicant);
            }
            else{
                buffer[dim_buffer] = 0;
                if (strcmp(buffer, "exit") == 0)
                    eol = 1;
                else
                    printf("Messaggio : %s\n", buffer);
            }
            f_close_socket(socket_applicant);
        }
    }
   
    f_close_socket(socket_listener);
    printf("Server Terminato\n");
   
    return;
}

int f_create_socket (int port)
{
    int sock, errore;
    struct sockaddr_in tmp;
   
    //creazione del socket
   
    sock = socket(AF_INET, SOCK_STREAM, 0);
   
    tmp.sin_family = AF_INET;
    tmp.sin_addr.s_addr = INADDR_ANY;
    tmp.sin_port = htons(port);
   
    //il socket deve essere non bloccante
    errore = fcntl(sock, F_SETFL, O_NONBLOCK);
   
    //eseguo il bind del socket
    errore = bind(sock, (struct sockaddr *) &tmp, sizeof(tmp));
   
    //abilito la possibilità di gestire fino a 7 chiamate
    errore = listen(sock, 7);
   
    return sock;
}

void f_close_socket (int sock)
{
    close(sock);
    return;
}

Il programma è stato testato e funzione !! Very Happy
Una piccola nota va ai commenti fatti alla variabile socket_listener.
Ciò che ho scrito potrebbe risultare fuorviante.
Ciò che voglio dire scrivendo l'indirizzo 127.0.0.1 è che creando un socket ad una porta e con quell'indirzzo
si ottiene la stessa cosa che scrivendo solamente, come fatto nel codice, il numero della porta.
Questo perchè 127.0.0.1 equivale all'indirizzo di local_host del sistema, il che implica un riferimento alla macchina stessa Very Happy

In caso di dubbi e/o domande sono a disposizione Very Happy

_________________
生きるためにもあまり変過ぎるし、死ぬためにもあまり珍し過ぎる。
PROGRAMMA : Utilizzo socket per creazione di un Server 841_Allen_Walker
What D.Gray-man Character Are You?
Hosted By theOtaku.com: Animee
PROGRAMMA : Utilizzo socket per creazione di un Server BT*xJmx*PTEyMjMxMDgxNTY1MTUmcHQ9MTIyMzEwODE1OTI1MCZwPTY5MDgxJmQ9Jm49Jmc9MSZ*PSZvPWNjZTE1NjdiYjc2NDQ*Y2I5YjRjNmYwYThlM2FlZTBi
PROGRAMMA : Utilizzo socket per creazione di un Server Admingn2
ab89
ab89
Admin
Admin

Numero di messaggi : 74
Età : 31
Località : Rovigo
Data d'iscrizione : 29.09.08

Scheda personaggio
PF:

Torna in alto Andare in basso

Torna in alto


 
Permessi di questa sezione del forum:
Non puoi rispondere agli argomenti in questo forum