Recherche cours sur les sockets [C++] - C++ - Programmation
Marsh Posté le 19-10-2001 à 20:29:01
tiens au passage mon cours de socket en C de l'an dernier : 
 
Programmation des sockets 
 
I) Introduction 
 
socket = extension de la notion de descripteur de fichier  
-> caractérisé par un descripteur inséré ds la table des descripteurs d'un process 
-> utilisation des fonctions standard 
 
implémenté pr la 1ere fois sous unix BSD 
 
 
II) Concepts de base 
 1) Famille de protocole et famille d'adressage (domaine) 
  a) Famille de protocole (Protocol Family) 
 
Ensemble de protocoles répondant à une caractérisitique commune dans le cadre d'une architecture réseau 
ex : PF_INET caractérise les protocoles Internet reposant sur IP (TCP et UDP par ex) 
ex : PF_UNIX caractérise les protocoles propres aux systèmes UNIX 
 
  b) Famille d'adresse (Adresse Family) 
 
Ensemble de protocoles définissant un point de connection réseau de manière identique 
ex : AF_INET : il faut le couple adresse IP / n° de port (www.ec-lille.fr / 80 pr accéder au serveur de l'école) 
 
extrait de <sys/socket.h> (pr montrer pkoi on dit souvent que y a pas de diff entre PF_xxx et AF_xxx) 
#define PF_UNIX 0 
#define PF_INET 1 
#define PF_APPLTALK 2 
... 
... 
#define AF_INET PF_INET 
 
 
 2) Type de socket 
 
couche application du modèle OSI 
 
SOCK_DGRAM : socket de type datagram pour communication en mode non connecté (rapide mais non fiable) -> ex : UDP 
SOCK_STREAM : flux en mode connecté (fiable) -> ex : TCP 
SOCK_RAW : socket "brute" servant à définir de nouveau protocole -> accès direct à IP 
 
 
 
III) Famille d'adressage et structures de données 
 
* sys/socket.h 
 
struct sockaddr { 
       u_short sa_family;	/* famille d'adressage */ 
       char    sa_data[14];	/* autres données d'une famille d'adressage */ 
} 
 
* AF_UNIX (machine locale) 
 
sys/un.h 
struct sockaddr_un { 
       u_short sun_family;	/* AF_UNIX */ 
       cahr    sun_path[108];	/* Nom du pseudo fichier de synchro */ 
} 
 
pseudo fichier de synchro : il apparait avec un ls -la (avec la lettre s au debut de ses attributs de protection) 
 
* AF_INET 
 
netinet/in.h 
struct sockaddr_in { 
       u_short    sin_family;	/* AF_INET */ 
       u_short    sin_port;	/* port de connection */ 
       struct in_addr sin_addr; /* adresse IP */ 
       char    sin_zero[8]; /* réservé */ 
} 
 
struct in_addr { 
       u_long    s_addr; 
} 
 
 
 
 
IV) Primitives de programmation de sockets 
 1) Création d'un socket 
 
int socket (u_short domain, /* famille d'adressage : AF_UNIX, AF_INET */ 
        int type,       /* type de socket : SOCK_DGRAM, SOCK_STREAM */ 
 int protocol   /* mettre 0 pr le protocol par défaut (svt y en a qu'un de tte facon) */ 
); 
 
L'entier retourné est un descripteur de socket. 
 
ATTENTION !  
descripteur de fichier :  
0 = entrée standard (stdin) 
1 = sortie standard (stdout) 
2 = sortie erreur (stderror) 
 
 
 
 2) Liaison d'une socket (bind) 
 
Permet d'associer une adresse a une socket 
int bind (int sd,        /* descripteur de socket */ 
      struct sockaddr * addr,       /* addresse associée */ 
      int longueur        /* nbre d'octets de addr */ 
); 
 
Renvoi -1 en cas d'erreur. 
 
 
Pour les primitives suivantes, regardé ds le manuel 
 
 3) Primitives d'entrees/sorties 
  a) Lecture 
 
En mode non connecté : recvfrom  
En mode connecté : recv, read (standard) 
 
 
  b) Ecriture 
 
En mode non connecté : sendto 
En mode connecté : send, write 
 
 
 4) Etablir une connection 
 
process actif (écrivain/client)  | process passif (lecteur/serveur) 
---------------------------------+------------------------------------ 
socket -> sde                    | socket -> se (socket d'écoute) 
                                 | bind   -> se est lié à une adresse 
                                 | listen -> se écoute les demandes de connection 
connect -> demande de connection | accept -> accepter une demande -> sd = socket de dialogue 
ecriture sur sde   --------------->lecture sur sdl... 
lecture sur sde    <---------------ecriture sur sdl... 
 
 
 
 5) Libération d'une socket 
 
int shutdown( int sd, int mode); 
 
mode = 0 -> socket bloqué en lecture 
mode = 1 -> socket bloqué en écriture 
mode = 2 -> socket complètement fermé 
 
 
close (int sd); 
Equivalent a shutdown avec mode = 2 
 
 
 
 6) Divers 
 
*AF_UNIX 
unlink(char *) -> supression du pseudo fichier ("sun_path" ) 
A NE PAS OUBLIER EN FIN DE FICHER, SINON ERREUR BIND QD ON RELANCE LE PROG 
 
*Gestion des erreurs 
perror 
 
*Fonction de conversion d'entiers 
htons ou htonl (host to network short/long) 
ntohs ou ntohl (network to host short/long) 
Marsh Posté le 19-10-2001 à 21:46:34
Regarde dans MSDN l'aide sur les fonctions socket, send, recv, connect... C'est plutot bien explique. 
Si t'as des questions, n'hesite pas a me mailer. 
Marsh Posté le 20-10-2001 à 13:13:09
ok, merci chadenat pour ce lien  
 
 
merci aussi a toi lolo pour ton cours, qui a l air bien synthetisé donc c un bon point pour commencer  
 
 
enfin, merci a toi aussi bjbebert,  je ne suis pas tres frillant de msdn car j aurais voulu utiliser les socket sous linux, mais je ne manquerasi pas de regarde l aide de msdn 
Marsh Posté le 20-10-2001 à 14:19:31
merci bien pour le lien et le cours ! 
 
je vais me plonger dedans et voir ce que ça donne   
 
 
@+ ! 
Marsh Posté le 20-10-2001 à 17:49:16
socket = extension de la notion de descripteur de fichier   
-> caractérisé par un descripteur inséré ds la table des descripteurs d'un process 
-> utilisation des fonctions standard 
 
j ai l impression que je vais pas tout comprendre snas les episodes precedents  
 
 
en fiat meme je comprends rien lol  
 
Marsh Posté le 20-10-2001 à 17:49:49
socket = extension de la notion de descripteur de fichier   
-> caractérisé par un descripteur inséré ds la table des descripteurs d'un process 
-> utilisation des fonctions standard 
 
j ai l impression que je vais pas tout comprendre snas les episodes precedents  
 
 
en fiat meme je comprends rien lol  
 
Marsh Posté le 20-10-2001 à 17:50:25
socket = extension de la notion de descripteur de fichier   
-> caractérisé par un descripteur inséré ds la table des descripteurs d'un process 
-> utilisation des fonctions standard 
 
j ai l impression que je vais pas tout comprendre snas les episodes precedents  
 
 
en fiat meme je comprends rien lol  
 
Marsh Posté le 21-10-2001 à 11:59:23
ct un cours unix a la base  
 
c juste pr dire qu'une socket c en gros un n° qui caractérise ta connexion, comme le descripteur de fichiers est un n° qui caractérise ton fichier dans le systeme de fichier 
ca se manipule de la meme facon, avec des fonctions C standard 
 
(en gros, tu peux zapper si tu captes pas  
  )
) 
[edtdd]--Message édité par __Lolo__--[/edtdd]
Marsh Posté le 21-10-2001 à 16:37:32
t inquiete je capte  i am a unix lover
 i am a unix lover  
 
mais enfait c pas super detaillé.....faut deja s y connaitre 
Marsh Posté le 21-10-2001 à 16:42:46
Surtout que les sockets windows sont différents des sockets unix.
Marsh Posté le 21-10-2001 à 17:17:27
oups je viens de voir que je me suis incrusté dans le topic de [ ZED ]......je sais pas pourquoi masi je croyais vraiment en etre l auteur lol....j ai du confondre avec un topic au meme titre, desole
[edtdd]--Message édité par slvn--[/edtdd]
Marsh Posté le 19-10-2001 à 19:11:45
Hello !
Voilà je cherche des cours ou tutoriaux sur les sockets sous windows.
Merci d'avance !
---------------
The N·Zone New Formation Official Website