|
Il vous est
sûrement déjà arrivé d'aller clavarder sur Internet.
Le prochain exercice vous montrera comment créer votre
propre serveur de clavardage que vous pourrez utiliser
pour discuter avec vos amis. Notez qu'il s'agit de
l'adaptation d'un programme créé par M. Indrasena Reddy
et gracieusement offert sur Internet.
-
Commencez par créer
un nouveau projet que vous enregistrez sous le nom de Ex_24xx.vbp.
-
Allez au menu Projet,
option Composants et activez Microsoft Winsock
Control 6.0.
-
Créez ensuite
l'interface ci-dessous. Les caractéristiques à respecter
sont indiquée à la suite de l'image.

Feuille NAME:
F_Serveur
CAPTION: Serveur du clavardeur
HEIGHT: 4500
WIDTH: 6000 |
Cadre
(1)
NAME: CA_Adresse
CAPTION: Adresse IP du serveur
|
Étiquette
(2)
NAME: ET_AdrIP
BORDERSTYLE: 0-None
CAPTION: vide
|
| Étiquette (3)
NAME: ET_Clients
CAPTION: Liste des clients |
Zone
de liste ou ListBox (4)
NAME: ZL_Clients |
Contrôle
Winsock
NAME: WS_1
INDEX: 0 (permet de créer un groupe de
contrôles Winsock.
|
- Voici venu le temps de commencer la programmation de
cette application. Vous allez d'abord déclarer un
variable dans la section Général de la feuille. Celle-ci
servira à déterminer le numéro du contrôle Winsock à
utiliser.
Private V_Global As Long 'Variable servant à
emmagasiner le numéro des connexions
- L' opération suivante consiste à effectuer le réglage
de la connection et l'identification de l'adresse IP
du serveur dont auront besoin les applications clients
pour se brancher. Insérez donc le code suivant dans
l'événement FORM_LOAD.
Private Sub Form_Load()
V_Global = 0
'Initialisation de la variable
WS_1(0).LocalPort = 1001
'Détermination du port pour la première occurrence-->
du contrôle Winsock
WS_1(0).Listen
'Contrôle Winsock placé en écoute
ET_AdrIP.Caption = WS_1(0).LocalIP
'Identification de l'adresse IP du serveur-->
et inscription dans l'étiquette réservé pour
son affichage
End Sub
- Les deux procédures suivantes
sont incluses dans l'objet Winsock. La première
gère les demandes de connexion.
Private Sub WS_1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
'Acceptation des requêtes des clients
If Index = 0 Then
V_Global = V_Global + 1
'Incrémentation du compteur de connexions
Load WS_1(V_Global)
'Création d'un nouvel objet Winsock
WS_1(V_Global).LocalPort = 1001
'Détermination du port pour l'objet
WS_1(V_Global).Accept requestID
'Acceptation de la demande
End If
End Sub
- La seconde gère l'arrivée des
données. Vous remarquerez l'utilisation d'une nouvelle
instruction pour les chaînes: SPLIT. Celle-ci
permet d'extraire certaines parties de chaînes.
Private Sub WS_1_DataArrival(Index As Integer, ByVal bytesTotal As Long)
'Déclaration des variables
Dim V_i, V_j, V_num As Integer
Dim V_Chaine, V_utilisa As String
Dim V_a$()
'Variable redimensionnable
Dim V_u As Integer
'Lecture des données
WS_1(Index).GetData V_Chaine, vbString, bytesTotal
V_u = 0
If InStr(V_Chaine, "Logged") > 0 Then
'Recherche du code IN0123 généré quand le client se branche
If InStr(V_Chaine, "Logged In0123") > 0 Then
V_a$() = Split(V_Chaine, "Logged In0123")
ZL_clients.AddItem V_a$(1) 'Ajout du nom à la liste
For V_num = 0 To ZL_clients.ListCount - 1
'Vérification de la présence du nom
If ZL_clients.List(V_num) = V_a$(1) Then
V_u = V_u + 1
End If
If V_u > 1 Then
ZL_clients.RemoveItem (V_num) 'Suppression du nom si doublet
For V_i = 0 To V_Global
If WS_1(V_i).State = 7 Then
WS_1(V_i).SendData "Existing//0123" & V_Chaine 'Avertissement de-->
connexion refusée
DoEvents
End If
Next V_i
End If
Next V_num
V_utilisa = ""
For V_j = 0 To ZL_clients.ListCount - 1
V_utilisa = V_utilisa & ZL_clients.List(V_j) & "@"
Next V_j
V_utilisa = V_utilisa & "*Logged In0123"
For V_i = 0 To V_Global
If WS_1(V_i).State = 7 Then
WS_1(V_i).SendData V_utilisa 'Avis de connexion réussie
End If
Next V_i
End If
'Actions réalisées lors du débranchement du client (code OUt0123)
If InStr(V_Chaine, "Logged OUt0123") Then
V_a$() = Split(V_Chaine, "Logged OUt0123")
For V_num = 0 To ZL_clients.ListCount - 1
If ZL_clients.List(V_num) = V_a$(0) Then
ZL_clients.RemoveItem (V_num) 'Extraction du nom de la liste
End If
Next V_num
V_utilisa = ""
For V_j = 0 To ZL_clients.ListCount - 1
V_utilisa = V_utilisa & ZL_clients.List(V_j) & "@"
Next V_j
V_utilisa = V_utilisa & "*Logged Out0123"
For V_i = 0 To V_Global
If WS_1(V_i).State = 7 Then
WS_1(V_i).SendData V_utilisa 'Avis de connexion réussie
End If
Next V_i
End If
Else
'Envoi des données autres que les LOGIN et LOGOUT
For V_i = 0 To V_Global
If WS_1(V_i).State = 7 Then
WS_1(V_i).SendData V_Chaine 'Envoi du texte de V_Chaine
DoEvents
End If
Next V_i
End If
End Sub
- Voilà votre serveur terminé.
Enregistrez-le et testez-le. Tout ce que vous verrez pour
le moment est l'adresse IP de votre ordinateur. La
liste est vide puisqu'il n'y a aucun client de branché.
Application:
- Personnalisez l'aspect
visuel du serveur en ajoutant un arrière-plan et des
couleurs à votre goût. Enregistrez votre
nouvelle version sous le nom Ex_24bxx.vbp.
Créez ensuite une version .exe de votre programme.
|