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
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