Et puis, il n'y a pas que Internet. Les années nonantes ont vu l'émergence du Client/Serveur; une philosophie de programmation qui vise à répartir le travail informatique sur plusieurs machines communiquant entre elles. Le TCP/IP n'est rien de moins qu'un moyen aisé et quasi universel de dialogue entre des machines, même de familles totalement différentes, qu'elles soient situées dans le même local ou à l'autre bout du monde.
En pratique, Winsock se présente comme une DLL livrée soit avec Windows lui- même, soit avec un package de connexion Internet ou un package d'implémentation du protocole TCP/IP. Sous Windows 3.x, la DLL se nomme tout simplement WINSOCK.DLL; sous Windows-95 et sous Windows-NT, il y a deux DLL: l'une 16 bits répondant au même nom que celle de Windows 3.x et l'autre 32 bits répondant au doux nom de WSOCK32.DLL. Cet arrangement permet de faire fonctionner sous Windows 95 et Windows-NT tant les nouvelles applications 32 bits que les anciennes applications 16 bits.
Pour le programmeur, Winsock est vu comme une DLL des plus ordinaires. Il ne faut rien de spécial pour l'utiliser. Juste la même chose que n'importe quelle autre DLL: la définition des fonctions, de leurs paramètres et valeurs de retour. Tout cela est documenté dans un fichier d'aide que l'on trouve assez facilement: WINSOCK.HLP. C'est un fichier d'aide au format classique de Windows. Il est livré avec certains produits de développement de Microsoft, de Borland et d'autres. A strictement parler, l'aide est la seule chose absolument nécessaire. Le reste peut être déduit facilement. D'autant plus facilement que le fichier d'aide contient winsock.h un 'C header file' c'est-à-dire un fichier à inclure pour le langage C avec toutes les définitions appropriées au C. Borland inclut le fichier winsock.pas qui est l'équivalent de winsock.h pour Delphi 2.0. J'avais traduit winsock.h en winsock.pas pour la version 1.0 de Delphi il y a déjà quelques temps. J'ai légèrement adapté ce fichier pour qu'il soit 100% compatible avec la version livrée par Borland avec Delphi 2.0. Donc maintenant, il est possible d'écrire des programmes Delphi 16 et Delphi 32 bits qui sont totalement compatibles.
Il existe différentes versions de winsock. Elles sont compatibles du bas vers le haut. Les dernières versions (2.x) permettent de travailler avec d'autres protocoles que le TCP/IP, par exemple IPX.
Dans ces documents, on explique les détails de fonctionnement des différents protocoles, de manière à ce que tout le monde les implémente de la même manière, afin d'assurer l'interopérabilité.
Donc si à titre d'exemple vous souhaitez réaliser votre super programme de transfert de fichiers, plus convivial que tous ceux qui existent actuellement, vous devez potasser le RFC-859 qui vous dira tout sur la manière de procéder pour échanger des fichiers entre deux ordinateurs connectés à l'internet.
Après les RFC, c'est de winsock.hlp qu'il faut s'imprégner. Ce fichier contient les définitions de toutes les fonctions de la DLL. Il s'agit surtout d'un manuel de référence qui malheureusement n'explique pas beaucoup l'utilisation réelle des fonctions. Nous allons palier à cette lacune dans la suite de ce document.
Le programme exemple est donc celui écrit en Delphi et fonctionnant dans le 'PC serveur' sur le schéma ci-après J'ai dessiné deux clients sans spécifier de quoi ils sont constitués car en fait, cela n'a aucune importance du moment qu'ils utilisent TCP/IP (en local ou via Internet) et parlent 'telnet'.
L'idée principale derrière winsock est la notion de socket. C'est une abstraction informatique qui représente la connexion entre deux ordinateurs. Une connexion entre deux machines supposent que ces machines sont identifiées d'une manière univoque. Cela se fait par le biais d'une adresse IP: chaque machine se voit attribuer une adresse mondialement unique. Elle est constituée d'un nombre de 32 bits que l'on représente en général sous forme de quatre valeurs décimales séparées par un point. Par exemple: 192.161.65.31. Chaque valeur décimale représente la valeur d'un des 4 octets composant l'adresse IP.
Mais l'adresse IP ne suffit pas ! Dans une même machine, il peut y avoir plusieurs programmes qui fonctionnent simultanément. Donc une fois la machine identifiée avec son adresse IP, il faut encore identifier l'application visée, par exemple le transfert de fichier, le web ou l'émulation de terminal. Cette identification se fait au moyen d'un nombre de 16 bits supplémentaire: le port. Par exemple, le port de telnet est 23, celui de FTP est 21. Ce sont les différents RFC qui indiquent ces nombres.
Le logiciel système de réseau, et toute la quincaillerie se chargent de transférer les paquets d'information d'un ordinateur à l'autre. Une fois qu'un paquet arrive dans un ordinateur, le logiciel système se charge de router le paquet vers la bonne application. Ce routage se fait sur base des requêtes des applications. Par exemple, le serveur telnet annonce au logiciel système qu'il désire recevoir les paquets destinés au port 23. Si aucun autre programme n'a déjà demandé la même chose, le logiciel système enregistre la demande et enverra vers cette application tous les paquets faisant référence au port 23. L'application 'parle' au logiciel système par le biais de winsock. Les conversations prennent la forme d'appels de fonctions.
Revenons programmation TCP/IP avec Delphi, j'aurai l'occasion de développer en détail ces différents points, ainsi que ceux relatifs à la partie client. J'expliquerai le code source utilisé pour réaliser des serveurs et des clients, quels que soient les protocoles. J'expliquera également comment on peut simplifier la programmation avec winsock lorsque l'on utilise toutes les possibilités de Delphi, particulièrement en matière de composants.
Rendez-vous aux 24h Internet ! Venez avec vos disquettes pour copier le code source présenté lors du cours et directement utilisable dans vos applications.
François Piette
francois.piette@ping.be
Août 1996 - 2:293/2202@fidonet.org - BBS:+32-4-365.13.95
Retour à la page principale de En-Ligne
Dernière modification de cette page : 29 juillet 1997