![]()
LE CONTROLE dsSOCKET: CREER UNE APPLICATION IRC
Introduction
Commandes du Contrôle
Commandes de Connexion
Commandes de Transfère
Exemple d'une Connexion
Application Cliente
Application Serveur
Téléchargement
dsSocket est un contrôle Winsock (Windows Sockets) puissant
qui a été developpé par Dolphin Systems et permet de créer des
applications Internet (Client-Serveur).
dsSocket supporte la gestion de réseaux TCP et UDP. Nous verons
juste le côté TCP dans cet article.
Ok, ok... la même chanson du précédent article [Intro to dsSocket], si vous ne l'avez pas lu, je vous conseille vivement de le faire. C'est Important :^)
Bien, nous allons voir comment créer une application IRC (de chat). Ceci demande une application Cliente et Une Serveur.
Créez un nouveau projet vb, allez dans Composants (Ctrl+T), cliquez sur parcourir et allez dans le répertoire dans lequel vous avez dézipper vos fichiers .ocx [c'était le fichier dsSocket.zip ], sélectionnez dsSocket32.ocx et cliquez sur OK. De retour à la boîte de dialogue composants, vérifiez que la case "Dolphin Systems dsSocket TCP/IP control" est cochée et cliquez de nouveau sur OK.
Créer une feuille frmClient et une autre frmServeur.
L'initialisation de notre projet est terminé :^), On passe
au code !
NOTE: Pour le reste des applications cliente et serveur, seuls les bouts de code
essentiels (importants) seront présentés.
On travaille maintenant avec la feuille frmClient. Ajoutez y ces contrôles:
| Type | Nom | Description |
| TextBox | txtIP | Contient l'IP du serveur hôte |
| TextBox | txtPort | Le port de communications à utiliser avec le serveur |
| TextBox | txtMsg | Affiche les message reçus et l'état de la connexion |
| TextBox | txtTest | Zone où frapper le texte à envoyer au serveur |
| CommandButton | cmdSend | Bouton qui envoie le message au Serveur |
| CommandButton | cmdConnect | Se connecte au serveur |
Pensez à mettre la propriété Locked de txtMsg à true,
pour empêcher la saisie du texte à l'interier.
Votre application cliente doit maintenant ressemble à ceci:

Note: Pour un test, le client et le serveur se trouvent sur
une même machine ! Donc le client se connecte en utilisant l'IP de la machine où il se
trouve.
Passons au code. L'utilisateur choisi un pseudonyme (nickname).
| Private Sub Form_Load() User = InputBox("Donner votre nickname", "Nickname", "Jean") If User = "" Then User = "Guest1" 'Client et serveur sur la même machine txtIP = dsSocket1.LocalDotAddr 'Pour un test... Normalement le serveur est 'ouvert 24h/24 frmServeur.Show End Sub |
Quand l'utilisateur clique ensuite sur Connect
| Private Sub cmdConnect_Click() On Error Resume Next 'GESTION D'ERREURS If cmdConnect.Caption = "&Connecter" Then cmdConnect.Caption = "&Déconnecter" txtMsg = "|-| Connection au serveur..." & vbCrLf dsSocket1.RemoteDotAddr = txtIP '127.0.0.1 pour local 'dsSocket1.RemoteHost = "irc.ircchat.com" ' ou dsSocket1.RemoteHost = "localhost" pour faire des test ' Offline dsSocket1.RemotePort = txtPort 'Tout est prêt ? Allez hop ! dsSocket1.Connect Else cmdConnect.Caption = "&Connecter" 'Faut déconnecter dsSocket1.Close txtMsg = txtMsg & "|-| Déconnecté du serveur" & vbCrLf End If End Sub |
Si on est vraiment connecté, on doit envoyer le nickname de l'utilisateur au serveur.
| Private Sub dsSocket1_Connect() 'Evenement déclenché lorsqu'on est connecté txtMsg = txtMsg & "|-| Connecté au serveur" & vbCrLf dsSocket1.Send = "/USERNAME " & User End Sub |
S'il y a eu une erreur ou une exeption, alors on ferme la connexion
| Private Sub dsSocket1_Exception(ErrorCode As Integer, ErrorDesc As String) 'Y'a une erreur, une exeption ? Pas grave, fermons la 'connection dsSocket1.Close cmdConnect.Caption = "&Connecter" txtMsg = txtMsg & vbCrLf & ErrorDesc & vbCrLf End Sub |
Y'a des données qui arrivent ? l'évènement Receive se déclenche lors de l'arrivée de messages.
| Private Sub dsSocket1_Receive(ReceiveData As String) 'Reception d'un message txtMsg = txtMsg & ReceiveData & vbCrLf End Sub |
Et c'est tout l'essentiel du client...
On travaille maintenant avec la feuille frmServeur. Ajoutez y ces contrôles:
| Type | Nom | Description |
| TextBox | txtIP | Contient l'IP de la machine où se trouve le serveur |
| TextBox | txtPort | Le port de communications à utiliser avec les clients |
| TextBox | txtMsg | Affiche les message reçus et l'état de la connexion |
| TextBox | txtTest | Zone où frapper le texte à envoyer au client |
| CommandButton | cmdSend | Bouton qui envoie le message au client |
| CommandButton | cmdSrv | Active le serveur |
Pensez à mettre la propriété Locked de txtMsg à true,
pour empêcher la saisie du texte à l'interier.
Votre application serveur doit maintenant ressemble à ceci:

Dans cette application, on aura besoin de 2 contrôles
dsSocket:
- dsSocket1 pour écouter le port en attente de messages.
- dsSocket2 pour la gestion de la connexion client-serveur
Lorsque dsSocket1 détecte une connexion, il envoie cette connexion à dsSocket2
qui se charge de traiter les messages envoyés au serveur... Cool! Qu'Ils s'entendent bien
!
L'administrateur du serveur clique sur Servire pour activer son serveur.
| Private Sub cmdsrv_Click() On Error Resume Next 'GESTION DES ERREURS If cmdSrv.Caption = "&Servir" Then cmdSrv.Caption = "&Stopper le Service" txtMsg = "|-| Attente d'une connection..." & vbCrLf 'Initialisation de dsSocket1 'dsSocket1 écoute le Port pour voir s'il y a pas 'de connections 'et dsSocket2 prend en charge le client lors d'une connection. 'Se connecte au Port de la machine (du serveur) dsSocket1.RemoteDotAddr = "0.0.0.0" dsSocket1.LocalDotAddr = "0.0.0.0" dsSocket1.LocalPort = txtPort 'Ecoute le Port dsSocket1.Listen Else txtMsg = txtMsg & "Serveur En Arrêt." & vbCrLf cmdSrv.Caption = "&Servir" 'Hop! On quitte dsSocket1.Close dsSocket2.Close End If End Sub |
Quand un client se connecte au serveur, l'evènement Accept du socket de lecture (socket 2) est déclenché
| Private Sub dsSocket1_Accept(SocketID As
Integer) On Error Resume Next 'dsSocket2 Prend en charge la connexion dsSocket2.Socket = SocketID 'On accepte la connexion txtMsg = txtMsg & "|-| Chat en service..." & vbCrLf dsSocket1.Close 'On ferme le socket de lecture End Sub |
On écoute le Port, à l'arrivée de données, l'évènement
Receive du socket 2 est déclenché.
La première instruction que le client envoie au serveur est son NickName (via la
commande /USERNAME Nickname ), il est envoyé automatiquement.
Les commandes vous permettent de donner des instructions compréhensibles
automatiquement par le serveur... ex:
/SERVERNAME pour avoir le nom du serveur...
Il suffit de taper /SERVERNAME dans la zone de texte txtText et et
vous recevez en retour le nom du serveur (ici "Serveur Camernet" :^)
| Private Sub dsSocket2_Receive(ReceiveData As String) 'GESTION D'INSTRUCTIONS 'NOTE: VOUS POUVEZ AJOUTER VOS PROPRES INSTRUCTIONS Dim theLen As Long Dim thePerson As String If InStr(ReceiveData, "/USERNAME") Then 'On prend le nom du client /USERNAME 'Ex: /USERNAME Nickname theLen = Len(ReceiveData) - 10 'Taille du nickname thePerson = Right(ReceiveData, theLen) 'Nom de la personne User = thePerson ReceiveData = "" End If If InStr(ReceiveData, "/SERVERNAME") Then 'le client demande le nom du serveur dsSocket2.Send = "|-| ServerName: " & ServName & vbCrLf ReceiveData = "" End If If ReceiveData <> "" Then txtMsg = txtMsg & ReceiveData & vbCrLf End If End Sub |
Maintenant il faut envoyer des données au client, l'administrateur du serveur tape du texte dans txtText et clique sur OK.
| Private Sub txtText_KeyPress(KeyAscii As
Integer) If KeyAscii = 13 Then 'ENTER est pressé Call SendProc End If End Sub Private Sub SendProc() Dim Paquet As String If txtText <> "" Then Paquet = "Server: " & txtText 'Le serveur Parle :^) dsSocket2.Send = Paquet 'Envoie le paquet txtMsg = txtMsg & Paquet & vbCrLf txtText = "" 'Efface la zone de texte End If End Sub |
Et c'est terminé... Mais y'a un encore bocou, bocou à faire :^)
FONCTIONNEMENT
Normalement dans une vraie application IRC, le serveur se contente de recevoir les
données qu'il analyse et renvoie automatiquement une réponse... bref tout est'
automatisé côté Serveur !
Mais dans cet exemple, le serveur est un peu confondu au client... (il faut un
administrateur pour répondre aux message :^(. Mais si vous avez assez d'imagination, vous
pourrez réparer ce petit inconvénient !
TOUJOURS PLUS...
Ceci n'est qu'un exemple très simple, il y a encore beaucoup à faire pour qu'il devienne
une vraie application IRC !! Ex. Faire scroller automatiquement le textbox (facile),
vérifier la connexion avant de faire un .send...
BUG...
Quand on travaille avec un ordinateur qui se situe à 100.000 Km de chez soi, on
sait que tout est imprevisible. Je vous conseille donc de mettre constamment l'instruction
On Error Resume Next à l'entête de vos procédure :^)
Et, le programme qu'on vient de créer est encore bourré de bugs (j'en estime une
vingtaine :^) !!!
C'est bien beau tout ça, mais où est le programme lui-même ? Il est là, du calme :^)
wsIRC.zip - Téléchargez le zip qui contient les deux applications [Codes Sources Complet + Exe]
N'oubliez pas de télécharger dsSocket.zip si vous ne l'avez pas encore fait:
dsSocket.zip - Téléchargez le zip qui contient l'ocx dsSocket (dsSocket32.ocx) [et l'ocx principal de Winsock (MsWinSck.ocx)].
Ensuite vous le dézippez soit dans c:\windows\system (de préférence) ou dans le repertoire de votre application et le tour est joué !
[Home]
[Actualités]
[Trucs
& Astuces]
[Astuces Windows]
[ActiveX-Ocx/Dll]
[Articles]
[Codes Sources]
[VB
Games]
[Fichiers Sons]
[Fichiers Icônes]
[Programmes & Sources]
[Mailing-List]
[Divers]
[A Propos]