Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 9 лет назад пользователемВалентин Мамаев
1 Réalisé Par : Djekhar Adlane Bougamouza Hamza Les Sockets (Principes et implémentation)
2 Sommaire: Introduction Qu'est-ce qu'une socket? Types de sockets Ouverture dune Socket Résolution dadresses Comment écouter les connexions par socket comment appeler une socket comment parler à travers une socket Fermeture dune Socket
3 Introduction : Il y a un peu plus de 15 ans, l'ARPA (Advanced Research Projects Agency du département de la défense américaine) a assigné à l'Université de Californie à Berkeley la responsabilité de construire un système d'exploitation qui pourrait être utilisé comme plate-forme standard pour l'ARPAnet, le prédécesseur de l'actuel Internet. Berkeley, déjà très connu pour son travail sur Unix, a ajouté une nouvelle interface au système d'exploitation pour implémenter les communications réseaux. Cette interface est généralement connue sous le nom de Berkeley Sockets Interface et est à l'origine de presque tout ce qui existe comme interface pour TCP/IP, et notamment à l'origine des Windows Sockets (WinSock).
4 Qu'est-ce qu'une socket? Il sagit dun point de communication bidirectionnel par lequel un processus pourra émettre ou recevoir des informations,alors Lobjectif des sockets est de permettre à plusieurs processus, éventuellement distants, de communiquer, cest à dire déchanger des informations. Une socket ressemble beaucoup à un téléphone : c'est l'extrémité d'un canal de communication bidirectionnel. En connectant deux sockets ensemble, on peut faire passer des données entre processus, même entre processus séxécutant sur des machines différentes, exactement de la même façon qu'on parle à travers le téléphone, une fois qu'on s'est connecté chez quelqu'un d'autre en l'appelant.
5 L'analogie du téléphone est excellente et sera utilisée à maintes reprises pour décrire les fonctions des sockets, même si contrairement au téléphone, il y a une distinction à faire entre le programme qui accepte les connexions entrantes et celui qui demande la connexion. Un serveur est un programme qui attend les connexions entrantes et qui propose sûrement un certain service à d'autres programmes. Par contre, Un client est un programme qui se connecte au serveur, généralement pour lui demander de faire quelque chose. Il est important de se souvenir que ce n'est pas le type d'ordinateur qui distingue ce qu'est un client et ce qu'est un serveur, mais la façon dont le programme utilise la socket. Beaucoup de personnes font la confusion...
6 Communication entre processus par lintermédiaire de sockets Processus 2 Processus 1 Socket 2Socket 1 Niveau IP On peut schématiser le concept de socket comme suit :
7 Types de sockets Nom symbolique Caractéristiques principales SOCK_RAWsocket orientée vers léchange de datagrammes `a un niveau bas de protocole ( IP par exemple ) SOCK_DRAMsocket orientée vers la transmission de datagrammes structurés en mode non connecté avec une fiabilité minimale SOCK_STREAMsocket orientée vers l échange de séquences continues de caractères, généralement en mode connecté avec garantie du maximum de fiabilité SOCK_RDMsocket orientée vers léchange de datagrammes en mode non– connecté en garantissant un maximum de fiabilité SOCK SEQPACKET socket orientée vers léchange de datagrammes en mode connecté en garantissant un maximum de fiabilité
8 Ouverture dune Socket: Au début de chaque programme qui utilise des sockets, il faut appeler la fonction WinScockWSAStartup(): WSADATA info; if (WSAStartup(MAKEWORD(1,1), &info) != 0) MessageBox(NULL, "Impossible d'initialiser WinSock!", "WSAStartup", MB_OK); Le premier argument est le numéro de version de la librairie WinSock que vous utilisez Etant donné que les nouvelles librairies doivent pouvoir utiliser les applications qui utilisent WinSock 1.1, et que peu de programmeurs ont besoin des nouvelles fonctionalités de WinSock 2.0, spécifier 1.1 vous permettra de travailler avec la plupart des librairies disponibles sur le marché.
9 Si la fonction d'initialisation échoue, on peut obtenir des informations sur l'erreur qui s'est produite en appelant la fonction WSAGetLastError(), qui retourne le code d'erreur correspondant à la cause de l'echec. Il en va de même pour la plupart des fonctions de WinSock. De même, il faut utiliser la fonction WSACleanup() avant d'arrêter le programme pour quitter proprement la librairie WinSock. Dans les applications Win32, cette appel n'est pas toujours obligatoire mais c'est indispensable dans des applications Win16.
10 Résolution dadresses : Comme pour le téléphone, chaque socket a une adresse unique composée de deux éléments : une adresse IP et un numéro de port. La première partie est l'adresse IP, un nombre généralement écrit comme quatre nombres séparés par des points (comme ), qui spécifie l'ordinateur à qui vous voulez parler. Tous les ordinateurs d'Internet ont une adresse IP. La seconde partie est le numéro de port, qui autorise plusieurs conversations simultanées sur chaque ordinateur. Une application peut soit prendre un numéro de port réservé pour son type d'application, soit en demander un au hasard lorsqu'il lie une adresse à sa socket.
11 Malheureusement, les nombres sont difficiles à retenir, surtout quand vous devez travailler avec beaucoup de nombres différents. Comme pour le téléphone, un service de recherche existe pour se souvenir un nom simple plutôt que plusieurs nombres ( ). L'interface la plus utilisée pour retrouver une adresse est la fonction gethostbyname(), qui prend le nom d'un ordinateur et vous renvoie son adresse IP. De même, il est possible de retrouver le nom d'un ordinateur quand on a son adresse IP en utilisant la fonction gethostbyaddr().
12 Retournons dans les débuts d'ARPAnet, quand il y avait seulement quelques centaines d'ordinateurs sur l'ensemble du réseau. Quelques ordinateurs gardaient une liste de tous les ordinateurs, et ces fonctions recherchaient simplement dans un fichier le nom recherché.
13 Maintenant que le réseau s'est agrandit à des dizaines de milliers d'ordinateurs, cette solution ne pouvait plus marcher : les changements permanents demanderaient des mises-à-jour trop fréquentes, et tellement de personnes auraient besoin de ces informations que l'ordinateur qui les garderait serait toujours en surcharge. La solution à ce problème a été le DNS Domain Name Service. Comme un code postal, le nom d'un hôte DNS est composé de plusieurs parties, en commençant par le domaine le plus haut (comme.com,.fr,.net,.org) et allant de droite à gauche vers l'entité la plus petite, soit le nom de domaine, puis le nom de sous-domaine (si il y en a un), et enfin le nom de l'ordinateur.
14 L'idée est que si personne ne peut se souvenir de toutes les adresses d'Internet, chacun est capable de retenir sa propre adresse local ainsi que les quelques domaines dans lesquels il évolue. Quand on ne connait pas l'adresse d'un ordinateur, on demande directement à son domaine qui émet une requête jusqu'à ce que quelqu'un lui donne la réponse. Le résultat est une base de données énorme qui est capable de répondre à des millions de demandes différentes sans chercher trop longtemps. En plus de l'adresse de celui à qui vous voulez parler, vous devez savoir quelle est votre propre adresse. Malheureusement, il n'y a pas moyen de dire: "Donne-moi mon adresse", principalement parce qu'il est possible d'avoir plusieurs adresses IP (adresse unicast et multicast). Donc, vous pouvez utiliser la fonction gethostname() pour demander "Quel est mon nom?" et utiliser ensuite la fonction gethostbyname() pour obtenir votre propre adresse IP. The procédé sera rapidement illustré.
15 Pour recevoir des appels téléphoniques, il faut dabord installer votre téléphone. Pour ce faire, il faut créer une socket pour écouter les connections, un procédé qui se passe en plusieurs étapes. Dabord, il faut créer une socket, ce qui ressemble à se faire installer une ligne de téléphone par la compagnie des télécoms. La fonction socket() est utilisée pour ça. Comme il y a plusieurs types de sockets, il faut spécifier le type de socket que vous voulez quand vous la créez. Comment écouter les connexions par socket
16 Un des arguments est la famille dadresse utilisée par la socket. Comme le service des postes utilise plusieurs techniques pour délivrer le courrier ou que la compagnie des télécoms utilise plusieurs types de numéros, les sockets peuvent être différentes. La famille dadresse la plus courante (et la seule disponible avec Winsock 1.1) est le format Internet, spécifié par le nom AF_INET.Une autre argument quil faut remplir est le type de socket. Les deux plus connus sont SOCK_STREAM et SOCK_DGRAM. SOCK_STREAM indique que les données seront transportées comme une chaîne de caractères (TCP), alors que SOCK_DGRAM indique que les donées seront transportées en mode datagramme (UDP).
17 Nous ne nous intéresserons ici quaux sockets SOCK_STREAM, qui sont les plus courantes et les plus faciles à utiliser. Après avoir créé une socket, il faut lui donner une adresse à écouter, de la même façon quon prend un numéro de téléphone pour pouvoir recevoir des appels. La fonction bind() est utilisée pour ça (to bind veut dire « lier », il sagit ici de lier lobjet socket à une adresse). Une adresse de socket Internet est spécifié en utilisant la structure sockaddr_in, qui contient les champs qui spécifient la famille dadresse, soit ladresse IP et le numéro de port pour la socket. Un pointeur vers cette structure est passé en argument aux fonctions qui, comme la fonction bind(), ont besoin dune adresse. Comme les sockets prétendent gérer plus quune famille dadresse, il faut mettre le pointeur vers la structure sockaddr_in dans un pointeur de structure sockaddr pour éviter les warnings à la compilation.
18 Les sockets de type SOCK_STREAM ont la capacité de mettre les requêtes de connexion en files dattentes, ce qui ressemble au téléphone qui sonne en attendant que lon réponde. Si cest occupé, la connexion va attendre que vous libériez la ligne. La fonction listen() est utilisée pour donner le nombre maximum de requêtes en attente (généralement jusquà 5 maximum) avant de refuser les connexions.
19 Après avoir créé une socket pour recevoir des appels, il faut accepter les appels vers cette socket. La fonction accept() est utilisée pour se faire. Appeler la fonction accept() est équivalent à prendre le combiné lorsque le téléphone sonne. Accept() renvoie une nouvelle socket qui est connecté à celui qui appelle. Un programme qui attend les connexion par socket accept() généralement en boucle et gère toutes les connexions qui arrivent (serveur ).
20 comment appeler une socket Nous savons maintenant comment créer des sockets qui acceptent les appels entrants. Alors, comment on l'appelle? Comme pour le téléphone, il faut d'abord avoir un téléphone avant de l'utiliser. On utilise la fonction socket() exactement de la même façon que pour recevoir les appels. Après avoir créé une socket, et après lui avoir donné une adresse, il faut utiliser la fonction connect() pour essayer de se connecter à une socket qui attend les appels.
21 comment parler à travers une socket Maintenant que nous avons une connexion entre deux sockets, nous voulons envoyer des données entre elles. Les fonctions send() and recv() sont là pour ça. Contrairement à quand nous lisons ou écrivons un fichier, le réseau peut seulement envoyer ou recevoir un certain volume de données à chaque fois. C'est pourquoi, même si nous demandons beaucoup de caractères d'un coup, nous n'en obtiendrons souvent moins que ce que nous avons demandé. Une façon d'éviter ça est de faire une boucle jusqu'à ce que nous avons reçu le nombre de caractères que nous voulions.
22 Fermeture dune Socket: De la même façon que nous raccrochons après avoir eu quelqu'un au téléphone, il faut fermer la connexion entre les deux sockets. La fonction closesocket() est utilisée pour fermer chaque extrémité de la connexion. Si une des extrémité est fermée et que vous essayez d'utiliser la fonction send() à l'autre, la fonction send() renverra une erreur. Un recv() qui attend quand la connection à l'autre extrémité est fermé ne retournera aucun octet.
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.