| Les sockets |
La création d'un socket se fait grâce à la fonction socket() :
int socket(famille,type,protocole)
Voici un exemple d'utilisation de la fonction socket() :
descripteur = socket(AF_INET,SOCK_STREAM,0);
Après création du socket, il s'agit de le lier à un point de communication défini par une adresse et un port, c'est le rôle de la fonction bind() :
bind(int descripteur,sockaddr localaddr,int addrlen)
struct sockaddr {
/* longueur effective de l'adresse */
u_char sa_len;
/* famille de protocole (généralement AF_INET) */
u_char sa_family;
/* l'adresse complète */
char sa_data[14];
}
struct sockaddr_in {
/* famille de protocole (AF_INET) */
short sin_family;
/* numéro de port */
u_short sin_port;
/* adresse internet */
struct in_addr sin_addr;
char sin_zero[8]; /* initialise à zéro */
}
sockaddr_in localaddr ;
localaddr.sin_family = AF_INET; /* Protocole internet */
/* Toutes les adresses IP de la station */
localaddr.sin_addr.s_addr = htonl(INADDR_ANY);
/* port d'écoute par défaut au-dessus des ports réservés */
localaddr.sin_port = htons(port);
if (bind( listen_socket,
(struct sockaddr*)&localaddr,
sizeof(localaddr) ) == SOCKET_ERROR) {
// Traitement de l'erreur;
}
Le numéro fictif INADDR_ANY signifie que le socket peut-être associé à n'importe quelle adresse IP de la machine locale (s'il en existe plusieurs). Pour spécifier une adresse IP spécifique à utiliser, il est possible d'utiliser la fonction inet_addr() :
inet_addr("127.0.0.1");
/* utilisation de l'adresse de boucle locale */
Le socket peut être relié à un port libre quelconque en utilisant le numéro 0.
La fonction listen() permet de mettre un socket en attente de connexion.
La fonction listen() ne s'utilise qu'en mode connecté (donc avec le protocole TCP)
int listen(int socket,int backlog)
Voici un exemple d'utilisation de la fonction listen() :
if (listen(socket,10) == SOCKET_ERROR) {
// traitement de l'erreur
}
La fonction accept() permet la connexion en acceptant un appel :
int accept(int socket,struct sockaddr * addr,int * addrlen)
Voici un exemple d'utilisation de la fonction accept() :
Sockaddr_in Appelant; /* structure destinée à recueillir les renseignements sur l'appelant Appelantlen = sizeof(from); accept(socket_local,(struct sockaddr*)&Appelant, &Appelantlen);
La fonction connect() permet d'établir une connexion avec un serveur :
int connect(int socket,struct sockaddr * addr,int * addrlen)
Voici un exemple d'utilisation de la fonction connect(), qui connecte le socket "s" du client sur le port port de l'hôte portant le nom serveur :
toinfo = gethostbyname(serveur);
toaddr = (u_long *)toinfo.h_addr_list[0];
/* Protocole internet */
to.sin_family = AF_INET;
/* Toutes les adresses IP de la station */
to.sin_addr.s_addr = toaddr;
/* port d'écoute par défaut au-dessus des ports réservés */
to.sin_port = htonl(port);
if (connect(socket,(struct sockaddr*)to,sizeof(to)) == -1) {
// Traitement de l'erreur;
}
La fonction recv() permet de lire dans un socket en mode connecté (TCP) :
int recv(int socket,char * buffer,int len,int flags)
Voici un exemple d'utilisation de la fonction recv() :
retour = recv(socket,Buffer,sizeof(Buffer),0 );
if (retour == SOCKET_ERROR) {
// traitement de l'erreur
}
La fonction send() permet d'écrire dans un socket (envoyer des données) en mode connecté (TCP) :
int send(int socket,char * buffer,int len,int flags)
Voici un exemple d'utilisation de la fonction send() :
retour = send(socket,Buffer,sizeof(Buffer),0 );
if (retour == SOCKET_ERROR) {
// traitement de l'erreur
}
La fonction close() permet la fermeture d'un socket en permettant au système d'envoyer les données restantes (pour TCP) :
int close(int socket)La fonction shutdown() permet la fermeture d'un socket dans un des deux sens (pour une connexion full-duplex) :
int shutdown(int socket,int how)
| 16/07 14h12 | [Socket] Client Delphi vers Serveur Java | 2 |
| 06/07 10h37 | Possible de changer le socket de ma carte ? | 2 |
| 04/07 14h37 | Les sockets en C++ : répuperer IP utilisateur | 2 |
| 03/07 16h28 | Probleme socket | 6 |
| 01/07 22h50 | SOCKET 939 | 7 |
![]() | Net transport - Net Transport (NetXfer) est un outil de téléchargement permettant d'affectuer une capture (téléchargement) de vidéos... | Catégorie: Copie/Extraction Licence: Demo |
![]() | Unison - Unison est un logiciel de synchronisation de répertoires. Il est capable de travailler de manière bidirectionnelle, c'est... | Catégorie: Gestion de fichiers Licence: Open Source |
![]() | AMD Athlon 64 3200+ | Catégorie: Processeur | |
![]() | AMD Sempron 2800+ 1.6 | Catégorie: Processeur | |
![]() | AMD Athlon 64 X2 | Catégorie: Processeur | 86.25 € Grosbill.com |
![]() | Intel Core 2 Duo | Catégorie: Processeur | 96.99 € Surcouf |