Programmation TCP/IP - INTERNET avec DELPHI

Par François Piette

INTRODUCTION

Winsock est le nom donné à l'interface de programmation qui donne aux applications Windows l'accès à une librairie de fonctions qui permet de communiquer à travers un réseau en utilisant le protocole TCP/IP. Autrement dit, Winsock permet d'écrire des applications Windows qui répondent aux normes d'Internet.

A QUOI CELA SERT-IL ?

Chacun sait qu'il existe quantité d'applications qui permettent de 'naviguer' dans le monde d'Internet. Il faut bien que quelqu'un les ait écrites... Ces applications ne font peut- être pas exactement ce que l'on veut, ou pas aussi automatisé qu'on le souhaiterait, ou elles sont trop lourdes pour la petite tâche que l'on a à accomplir. Toutes bonnes raisons pour écrire soi-même l'application taillée sur mesure.

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.

QU'EST-CE QUE WINSOCK ?

Winsock n'est rien de neuf. C'est juste une implémentation de la notion de 'socket' telle qu'apparue dans la Berkeley Software Distribution (BSD) de l'université de California à Berkeley. Ce BSD est une implémentation particulière de Unix. Winsock ajoute quelques fonctionnalités nécessaires à un fonctionnement correct dans le système multi-tâche non- préemptif de Windows 3.x. Ces ajouts ne sont plus nécessaires dans les versions 32 bits de Windows puisque le multi-tâche y est préemptif (avec en sus le multi-threading). Cela dit, les extensions existent aussi dans la version 32 bits de manière à permettre l'écriture de programmes 16 et 32 bits compatibles au niveau des sources.

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.

POUR COMMENCER

Pour débuter un projet de programmation Internet, il faut d'abord savoir de quoi on parle. La meilleure source se trouve être des documents RFC (Request For Comments). Ce sont les textes qui définissent les différents protocoles utilisés sur Internet. Chaque document est numéroté et correspond à un protocole ou un détail d'implémentation. Par exemple, le RFC-959 définit le protocole FTP (File Transfert Protocole), le RFC-854 définit le protocole TELNET (Network Virtual Terminal), le RFC-821 définit le protocole SMTP (Simple Mail Transfer Protocol) et ainsi de suite. Il y en a des centaines !

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.

PRINCIPE D'UTILISATION

Pour expliquer le principe d'utilisation, je vais partir d'un exemple concret. Supposons que l'on veuille écrire un programme qui permette à un utilisateur de se connecter en utilisant son programme 'telnet' (RFC-854). Le programme que nous devons écrire est un serveur telnet, l'utilisateur de notre programme utilisera quant à lui un client telnet autrement appelé un émulateur de terminal. C'est un grand nom pour désigner le programme généralement bien connu et nommé telnet.exe qui permet à quelqu'un de se connecter sur une machine Unix disponible quelque part sur le réseau (local ou internet). Donc ce que nous voulons faire, c'est un programme qui fera que notre PC sous Windows sera accessible de l'extérieur comme si c'était une machine Unix. Bien sûr ici nous nous limiterons à l'essentiel relatif à la communication. Je laisserai à titre d'exercice le travail qui consiste à écrire l'interpréteur de commandes.

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

E-Mail WebMaster

Dernière modification de cette page : 29 juillet 1997