Mode connecte et non connecté en VB

Mode connecte et non connecté en VB

1 – Le composant Winsock en VB

Le contrôle Winsock VB de Microsoft permet d’envoyer des datagrames facilement à un autre ordinateur ou tout autre équipement Ip. Ce contrôle ne supporte que 
deux mode de connexion qui sont TCP et UDP.

On peut utiliser ce contrôle sous deux formes. La première comme composant et la seconde comme référence. Quand vous voulez utiliser Winsock dans votre 
application, vous devez l’ajouter comme composant « Microsoft Winsock Control 6.0 » ou comme référence « %WinDir%\System\mswinsck.ocx ».

2 – Les propriétés, les procédures et les évènements de Winsock

Voici la liste des propriétés ayant rapport à la configuration de Winsock. Leurs effets et les valeurs qu’ils peuvent prendre et évidemment, elle peuvent aussi en retourner.

  • Nom : Name
    Effet : *(Quand il est sur une feuille) Le nom du contrôle
    Valeur acceptées : Une chaîne de caractères correcte pour un nom d’objet
  • Nom : Index
    Effet : *(Quand il est sur une feuille) Son index si il fait partit d’une collection de contrôles
    Valeur acceptées : rien=pas dans une collection;un chiffre de 0 à (limite du type entier)
  • Nom : Left
    Effet : *(Quand il est sur une feuille) La position du côté gauche du contrôle
    Valeur acceptées : un chiffre
  • Nom : LocalPort
    Effet : Port à écouter pour recevoir des paquets ou des demandes de connexion
    Valeur acceptées : un chiffre de 0 à 65 000
  • Nom : Protocol
    Effet : Protocole à utiliser
    Valeur acceptées : 0 pour TCP et 1 pour UDP
  • Nom : RemoteHost
    Effet : L’adresse de l’hôte auquel il faut envoyer des paquets (UDP)
    Valeur acceptées : une adresse ip: 192.168.0.1, 125.124.368.14, … ou un DNS.
  • Nom : RemotePort
    Effet : Le port de l’hôte auquel il faut envoyer des paquets (UDP)
    Valeur acceptées : un chiffre de 0 à 65 000
  • Nom : Tag
    Effet : *(Quand il est sur une feuille) Une propriété pour stocker des données, ce que l’on veut
    Valeur acceptées : ce que l’on veut
  • Nom : Top
    Effet : *(Quand il est sur une feuille) La position du haut du contrôle
    Valeur acceptées : un chiffre

Voici la liste des propriétés de Winsock retournant une valeur en lecture seule.

  • Nom : BytesReceived
    Résultat : Nombre de BYTES reçus
  • Nom : LocalHostName
    Résultat : Nom d’hôte de cet ordinateur
  • Nom : RemoteHostIP
    Résultat : Adresse IP de l’hôte auquel on est connecté
  • Nom : SocketHandle
    Résultat : Le handle du socket qui est utilisé (la section que l’API winsock a dû lui réserver)
  • Nom : State
    Résultat : L’état du socket (connecté, erreur, attente de connexion, …)

Voici la liste des évènements que Winsock peut déclencher. Normalement, tout va bien dans une feuille, mais pour la classe, vous devez utiliser Withevents puis lui créer un instance et il n’y aura pas de problème.

  • Nom : Close()
    Description : Fermeture d’une connexion (TCP)
  • Nom : Connect()
    Description : Connexion réussie (TCP)
  • Nom : ConnectionRequest(ByVal requestID As Long)
    Description des arguments : l’ID d’une requête de connexion)
    Description : Demande de connexion (TCP)
  • Nom : DataArrival(ByVal bytesTotal As Long)
    Description des arguments : Le nombre de bytes qui arrivent
    Description : Arrivée de données
  • Nom : Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
    Description des arguments : Informations relatives à l’erreur (numéro, description, …)
    Description : Erreur!!!!!!
  • Nom : SendComplete()
    Description : Envoi des données terminé
  • Nom : SendProgress(ByVal bytesSent As Long, ByVal bytesRemaining As Long)
    Description des arguments : Nombre de bytes envoyées, Nombre de bytes qui reste à envoyer
    Description : Envoi des données en cours …

Avec c’est différentes méthodes et propriétés, vous serez capables de créer des applications utilisant Winsock.

3 – Mode connecté

3.1 – Schéma d’une relation client serveur

vb-mode-tcp-udp mode connecte schema relation client serveur

3.2 – Le mode client

Voici le code expliqué d’un client en TCP. Il est bien sur requis une feuille avec un bouton command1 et un contrôle socket.

Private Sub Command1_Click() socket.Connect "www.google.com", 80 'On se connecte à www.google.com sur le port 80 End Sub
Private Sub socket_Close() 'Fin de la connexion MsgBox "connexion terminée!" socket.Close 'Fermeture du socket End Sub
Private Sub socket_Connect() 'Connexion établie MsgBox "connexion réessie!" socket.SendData "GET / HTTP/1.0" & vbCrLf & "Accept: */*" & vbCrLf & "User-Agent: Winsock" & vbCrLf & vbCrLf 'On envoie des données au serveur, ici c'est une requête HTTP End Sub
Private Sub socket_DataArrival(ByVal bytesTotal As Long) 'Arrivée de données Dim data As String If socket.State <> sckConnected Then Exit Sub 'Juste au cas où ça a buggé socket.GetData data, vbString 'On récupère les données 'DONNÉES DANS DATA MsgBox data End Sub
Private Sub socket_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean) Err.Clear 'On ignore l'erreur End Sub

Voici comment créer un client HTTP sans utiliser le contrôle Winsock, mais plutôt l’objet référence.

Public WithEvents socket As Winsock 'Pour les évènements
Private Sub Command1_Click() socket.Connect "www.google.com", 80 'On se connecte à www.google.com sur le port 80 End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Set socket = Nothing 'On vide l'objet winsock End Sub
Private Sub socket_Close() 'Fin de la connexion MsgBox "connexion terminée!" socket.Close 'Fermeture du socket End Sub
Private Sub socket_Connect() 'Connexion établie MsgBox "connexion réessie!" socket.SendData "GET / HTTP/1.0" & vbCrLf & "Accept: */*" & vbCrLf & "User-Agent: Winsock" & vbCrLf & vbCrLf 'On envoie des données au serveur, ici c'est une requête HTTP End Sub
Private Sub socket_DataArrival(ByVal bytesTotal As Long) 'Arrivée de données Dim data As String If socket.State <> sckConnected Then Exit Sub 'Juste au cas où ça a buggé socket.GetData data, vbString 'On récupère les données 'DONNÉES DANS DATA MsgBox data End Sub
Private Sub socket_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean) Err.Clear 'On ignore l'erreur End Sub
Private Sub Form_Load() Set socket = New Winsock 'On initialise winsock 'With socket '.param1=??? '.param2=??? 'End With End Sub

3.3 – Le mode serveur

3.3.1 – Sur une feuille

Voici le code expliqué d’un serveur avec un seul client TCP simultané. Il est bien sur requis une feuille avec un bouton command1 et un contrôle Winsock socket.

Private Sub Command1_Click() socket.Close 'UN SOCKET DOIT ÊTRE FERMER AVANT D'ÊTRE MIS EN ÉCOUTE!!! socket.LocalPort = 95 'écoute port 95 socket.Listen End Sub
Private Sub socket_Close() 'Fermeture du socket MsgBox "connexion terminée!" socket.Close 'S'assurer que le socket se ferme car sinon, ça peut être très drôle ;-) Command1_Click End Sub
Private Sub socket_ConnectionRequest(ByVal requestID As Long) 'Demande de connexion MsgBox "Demande de connexion!" socket.Close 'UN SOCKET DOIT ÊTRE FERMER AVANT D'ACCEPTER UNE CONNEXION!!! 'Bon, ya u gros problème. c'est une connexion par socket. QUE FAIRE!!! socket.Accept requestID 'Une autre contrôle winsock peut très bien accepter cette demande... End Sub
Private Sub socket_DataArrival(ByVal bytesTotal As Long) 'Arrivée des données Dim data As String If socket.State <> sckConnected Then Exit Sub 'En cas de problèmes ... on ne sait pas socket.GetData data, vbString MsgBox data 'Ce que le client dit (on s'en fiche tu :-) 'Ce qu'on lui répond : Dim envoie As String envoie = "<html><head><title>Salut</title></head><body>Allo</body></html>" 'La réponse à envoyer socket.SendData "HTTP/1.0 200 OK" & vbCrLf & "Server: Winsock/6.0" & vbCrLf & "Content-Type: text/html" & vbCrLf & "Content-Lenght: " & Len(envoie) & vbCrLf & vbCrLf & envoie 'Une réponse HTTP ^ End Sub
Private Sub socket_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean) Err.Clear 'En cas d'erreur, ignorer End Sub
Private Sub socket_SendComplete() socket.Close 'On ferme End Sub

Voici la partie serveur multi-clients. il est bien sur requis une feuille avec un bouton command1 et deux contrôles Winsock socket et écoute.

Private Sub Command1_Click() 'Le socket est ouvert et il restera ouvert If ecoute.State = 2 Then Exit Sub 'Si on écoute déjà, on quitte la procédure ecoute.LocalPort = 95 ecoute.Listen End Sub
Private Sub ecoute_ConnectionRequest(ByVal requestID As Long) 'LE TRÈS GROS MORCEAU Dim nb As Integer nb = socket.Count 'Le nombre de socket dans la collection. Comme le 0 compte, pas besoins de rajouter +1. Load socket(nb) 'On ajoute ajoute un autre socket dans la collection de ce contrôle socket(nb).Accept requestID 'CE contrôle fesant partit de la collection accepte la requête Debug.Print "Client ajouté : " & socket(nb).RemoteHostIP End Sub
Private Sub ecoute_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean) Err.Clear 'En cas d'erreur, ignorer End Sub
Private Sub socket_Close(Index As Integer) socket_SendComplete Index 'Si le socket se ferme, fait comme si l'envoie serait fini End Sub
Private Sub socket_DataArrival(Index As Integer, ByVal bytesTotal As Long) 'NOTEZ BIEN L'ARGUMENT INDEX. IL RETOURE L'INDEX DE CE SOCKET DANS LA COLLECTION 'Ce que le client dit (on s'en fiche tu :-) 'Ce qu'on lui répond : Dim envoie As String envoie = "<html><head><title>Salut</title></head><body>a" & String$(10000, "l") & "o</body></html>" 'La réponse à envoyer Debug.Print "Envoie du socket # " & Index & " à " & Now socket(Index).SendData "HTTP/1.0 200 OK" & vbCrLf & "Server: Winsock/6.0" & vbCrLf & "Content-Type: text/html" & vbCrLf & "Content-Lenght: " & Len(envoie) & vbCrLf & "Pragma: no-cache" & vbCrLf & vbCrLf & envoie 'Une réponse HTTP ^ End Sub
Private Sub socket_Error(Index As Integer, ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean) Err.Clear 'En cas d'erreur, ignorer End Sub
Private Sub socket_SendComplete(Index As Integer) socket(Index).Close 'Fermer le socket Debug.Print "Fermeture du socket # " & Index & " à " & Now If Index <> 0 Then Unload socket(Index) 'Si le socket n'est pas le 0 (celui de base), on le FLUSH End Sub

3.3.2 – Dans une classe

Pour un serveur avec un seul client, c’est la même chose que sur une feuille sauf qu’il faut utiliser Winsock comme référence et le déclarer avec Withevents. Pour un serveur multi-clients, c’est plus complexe.

Voici la partie cliente Classe 1.

Public WithEvents socket As Winsock
Public MyNum As Long
Private Sub Class_Initialize() Set socket = New Winsock End Sub
Private Sub Class_Terminate() Set socket = Nothing End Sub
Private Sub socket_Close() Form1.Killsocket MyNum 'S'assurer que le socket se ferme car sinon, ça peut être très drôle ;-) End Sub
Private Sub socket_DataArrival(ByVal bytesTotal As Long) 'Ce qu'on lui répond : Debug.Print "OK" Dim envoie As String envoie = "<html><head><title>Salut</title></head><body>A" & String$(1000, "l") & "o</body></html>" 'La réponse à envoyer socket.SendData "HTTP/1.0 200 OK" & vbCrLf & "Server: Winsock/6.0" & vbCrLf & "Content-Type: text/html" & vbCrLf & "Content-Lenght: " & Len(envoie) & vbCrLf & vbCrLf & envoie 'Une réponse HTTP ^ End Sub
Private Sub socket_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean) Err.Clear 'En cas d'erreur, ignorer End Sub
Private Sub socket_SendComplete() socket.Close 'On ferme End Sub

Voici la partie clients Classe 2.

Private WithEvents socket As Winsock
Public Sockets As New Collection
Public Num As Long
Private Sub Class_Initialize() Set socket = New Winsock With socket .LocalPort = 95 .Listen End With End Sub
Private Sub Class_Terminate() Set Sockets = Nothing Set socket = Nothing End Sub
Private Sub socket_ConnectionRequest(ByVal requestID As Long) Dim buf As New Client buf.socket.Accept requestID buf.MyNum = Num Num = Num + 1 Sockets.Add buf End Sub
Private Sub socket_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean) Err.Clear End Sub

Voici la définition de la feuille que l’on peux, au passage, se passer.

Private Clients As Clients
'JUSTE POUR DÉMARRER  ET NETTOYER CAR J'AI PAS ENVIE DE ME CASSER LA TÊTE
Private Sub Form_Load() Set Clients = New Clients End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Set Clients = Nothing End Sub
Sub Killsocket(MyNum As Long) For i = 1 To Clients.Sockets.Count If Clients.Sockets.MyNum = MyNum Then Clients.Sockets.Remove i Next End Sub

3.4 – Exemple complet d’une communication client serveur

C’est très simple, le serveur commence à écouter un port pour attendre une connexion Tcp. Dès qu’un client envoie une demande de connexion, le serveur l’accepte et établit l’ouverture de session avec le client. Le serveur et le client sont maintenant connectés et peuvent donc envoyer et recevoir des données. Quand le serveur arrête la connexion, le client s’en rend compte grâce à l’évènement socket_close. La fermeture de la session TCP peux être demandé par le client ou par le serveur.

Les sources et l’exe peuvent être téléchargé ici.

Private Sub CheckState_Timer()
If Clients.ListCount = 0 Then send.Enabled = False Else: send.Enabled = True 'Si il n'y a pas de client, pourquoi envoyer un message?
If Ecoute.State = 0 Then Go.Caption = "Écouter" Else: Go.Caption = "Arrêter le serveur" 'Placer le texte du bouton Go
End Sub

Private Sub Clients_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbRightButton And Clients.ListIndex <> -1 Then 'Si on clique avec le bouton droit et qu'on a sélectionner un ip dans la liste, on affiche le menu
PopupMenu pop
End If
End Sub

Private Sub Decon_Click() 'ON LE BOOT!!
Dim col
col = Split(Clients.List(Clients.ListIndex), ":") 'On récuprère son # de socket (après le ":")
Socket_Close (CInt(col(1))) 'On fait comme s'il aurait quitté
End Sub

Private Sub Ecoute_ConnectionRequest(ByVal requestID As Long) 'Demande de connexion
Dim Nb As Integer
Nb = Socket.Count '# de la prochaince socket disponible (LIMITE : 65535 CAR TYPE INTEGER = SUR 4 OCTETS (FFFF))
Load Socket(Nb) 'On charge ce socket
Socket(Nb).Accept requestID 'On fait accepter la connexion
recep.Text = recep.Text & recep.Text & "<system> : Connexion établie avec " & Socket(Nb).RemoteHostIP & " !" & vbCrLf & vbCrLf 'On dit que le client c'est connecté
Clients.AddItem Socket(Nb).RemoteHostIP & ":" & Nb 'On met son IP suivit de ":" et son 1 de socket dans la liste
End Sub

Private Sub Ecoute_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean) 'Erreur!
MsgBox "Erreur avec le socket! & vbcrlf # " & Number & vbCrLf & Description
Ecoute.Close
End Sub

Private Sub Form_Load()
CheckState_Timer 'On fait faire une première vérification avec le timer
End Sub

Private Sub Go_Click() 'On appuie sur le bouton Go
On Error Resume Next
If Ecoute.State = 2 Then 'Si on écoutait, ben on ferme
Ecoute.Close
For i = 1 To Socket.Count - 1 'On décharge tout les sockets
Socket(i).Close
Unload Socket(i) 'On détruit l'objet créer (0 ne peut pas être unloadé)
Next
Else 'Sinon ben on écoute
Ecoute.LocalPort = Port.Text 'Le port
Ecoute.Listen 'On écoute
If Err.Number <> 0 Then 'ERREUR, POURQUOI ON PEUT PAS ÉCOUTER (sûrement que le port est occupé)
MsgBox "Erreur avec le socket! & vbcrlf # " & Err.Number & vbCrLf & Err.Description 'On dit pourquoi
Err.Clear 'On nettoie l'erreur
End If
End If
End Sub

Private Sub send_Click() 'Envoie du message, comme avec le client
recep.Text = recep.Text & "<you> : " & vbCrLf & Emission.Text & vbCrLf & vbCrLf
For i = 1 To Socket.Count - 1
Socket(i).SendData Emission.Text
Next
Emission.Text = ""
End Sub

Private Sub Socket_Close(Index As Integer) 'Le client vient de quitter ou il s'est fait booter
Dim col
For i = 0 To Clients.ListCount - 1 'On cherche son # de socket pour l'enlever de la liste
col = Split(Clients.List(i), ":")
If col(1) = Index Then
Socket(col(1)).Close
Unload Socket(col(1)) 'On kill le socket
recep.Text = recep.Text & recep.Text & "<system> : Connexion terminée avec " & col(0) & " !" & vbCrLf & vbCrLf 'On dit qu'il quitte
Clients.RemoveItem i 'On l'enlève de la liste
Exit For 'Pas besoins de continuer
End If
Next
End Sub

Private Sub Socket_DataArrival(Index As Integer, ByVal bytesTotal As Long) 'Arrivée des données, comme avec le client
Dim data As String
Socket(Index).GetData data, vbString
recep.Text = recep.Text & "<" & Socket(Index).RemoteHostIP & "> : " & vbCrLf & data & vbCrLf & vbCrLf
End Sub

4 – Mode non connecté

4.1 – Schéma d’une relation client serveur

vb-mode-tcp-udp mode non connecte schema relation client serveur

4.2 – Le mode client et serveur

UDP est orienté sans connexion, donc il nécessite peu de code. C’est le même fonctionnement que Tcp, mais il n’y a pas de session, donc pas de fermeture de connexion. Il est bien sur requis deux Sockets en tant que contrôle ou objet socket1 et socket2 avec le protocole UDP de sélectionné !

'SOCKET 1 EST LE "CLIENT" ET LE 2 EST LE "SERVEUR"
Private Sub Form_Load() On Error Resume Next 'UDP PLANTE DESFOIS!!! socket2.Bind 98, "0.0.0.0" 'PORT À ÉCOUTER socket1.RemoteHost = "127.0.0.1" 'Adresse auquel il faut envoyer le(s) datagramme(s) socket1.RemotePort = 98 'Port auquel il faut envoyer le(s) datagramme(s) socket1.SendData "drole" 'Envoyer les données End Sub
Private Sub Form_Unload(Cancel As Integer) socket2.Close 'Arrêter d'écouter le port UDP 98 End Sub
Private Sub socket1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean) Err.Clear 'Ignorer l'erreur End Sub
Private Sub socket2_DataArrival(ByVal bytesTotal As Long) Dim data As String socket2.GetData data, vbString 'Prendre les données comme avec tcp MsgBox "Message de " & socket2.RemoteHostIP & " : " & data End Sub
Private Sub socket2_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean) Err.Clear 'Ignorer l'erreur End Sub

4.3 – Exemple complet d’une communication client serveur

Le principe d’UDP est simple. Premièrement, un « serveur » décide de commencer à écouter un port et attend l’arrivée de paquets de données. Un client lui envoie un datagramme en spécifiant à l’adresse ip et ports de destination ainsi que la correspondance de retour. Le client utilise LocalPort=le_#_du_port pour spécifier le port sur lequel il attend une réponse, pus communément appelé port source. Quand le serveur reçoit un paquet, il détermine les coordonnées de l’émetteur et peut ainsi lui répondre. Il n’y a pas de session donc pas de fermeture de connexion, cela permet d’effectuer des échanges courts et rapides.

Les sources et l’exe peuvent être téléchargé ici.

Option Explicit

Private Sub CheckState_Timer()
If Socket.State = 1 Then Go.Caption = "Arrêter" Else: Go.Caption = "Écouter"
End Sub

Private Sub Go_Click()
On Error Resume Next
If Socket.State <> 1 Then
Socket.Close
Socket.Bind port.Text, addr.Text
If Err.Number <> 0 Then 'ERREUR, POURQUOI ON PEUT PAS ÉCOUTER (sûrement que le port est occupé)
MsgBox "Erreur avec le socket! & vbcrlf # " & Err.Number & vbCrLf & Err.Description 'On dit pourquoi
Err.Clear 'On nettoie l'erreur
End If
Else
Socket.Close
End If
End Sub


Private Sub send_Click()
On Error Resume Next
If Socket.State <> 1 Then 'On prend 1 port pour recevoir les messages du recépteur
Socket.LocalPort = 0 'N'IMPORTE QUEL PORT LIBRE
End If
Socket.RemoteHost = sendaddr.Text 'L'adresse où ilo faut envoyer les données
Socket.RemotePort = sendport.Text 'Le port où ilo faut envoyer les données
Socket.SendData Emission.Text 'On envoie (ÇA PEUT BOGUER POUR RIEN!!!)
recep.Text = recep.Text & "<you> : " & vbCrLf & Emission.Text & vbCrLf & vbCrLf 'Pour savoir ce qu'on a envoyer
Emission.Text = "" 'On fait de la place pour un nouveau message
End Sub

Private Sub Socket_DataArrival(ByVal bytesTotal As Long)
Dim data As String
Socket.GetData data, vbString 'On les met dans la variable data
recep.Text = recep.Text & "<" & Socket.RemoteHostIP & "> : " & vbCrLf & data & vbCrLf & vbCrLf 'Pour dire qui à envoyer le message
sendaddr.Text = Socket.RemoteHostIP 'On garde son adresse et on peut lui répondre
sendport.Text = Socket.RemotePort 'On garde son port et on peut lui répondre
Beep
End Sub

Private Sub Socket_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
'ERREUR!!! ON AFFICHE L'ERRREUR ET ON FERME LE SOCKET
MsgBox "Erreur avec le socket! & vbcrlf # " & Number & vbCrLf & Description
Socket.Close
End Sub

5 – Les vidéos

6 – Suivi du document

Création et suivi de la documentation par DeadlyPredator et _SebF

7 – Discussion autour du mode connecte et non connecté en VB

Vous pouvez poser toutes vos questions, faire part de vos remarques et partager vos expériences à propos du mode connecte et non connecté en VB. Pour cela, n’hésitez pas à laisser un commentaire ci-dessous :

Commentaire et discussion

2 commentaires sur la page : “Mode connecte et non connecté en VB”

  1. j’ai écris un gros programme (500 pages de code) d’aide à la recherche généalogique en VB6 transposable en VB10…avec quelques efforts, rien de complexe des box, des boutons, des fichiers des pictures…
    il est interactif: on entre des données connues: profession, lieu de naissance…le programme répond en donnant des filières de recherche et des cotes d’archives
    Tout cela en local
    Je voudrais pouvoir le mettre à disposition de tous sur le net. je pense à VB.NET mais je n’ai aucune idée comment faire
    Pour commencer pour comprendre comment programmer, par exemple
    1- J’envoie 2 valeurs 3 et 4
    2-le programme chargé sur le net me répond le résultat de la mutiplication
    ….ou un autre exemple simple
    merci
    Je suis très très vieux mais ne veux pas mourir idiot ! j’ai commencé en 1968 sur un HP 2116…mais le proverbe dit: votre expérience est si longue qu’elle en devient mince
    aidez moi

    1. Lu Lefort,

      Je viens de déplacer ton commentaire dans la page VB, c’est plus en relation 🙂

      Pour ton programme, déjà, félicitations 🙂

      Si je comprend bien, tu as fait une application en mode lourd sur la généalogie et tu désires maintenant partager et la mettre à disposition.

      Si c’est bien ça, je pense que tu as deux possibilités :
      – Soit tu publis ton application intégrant la base et chacun pourra la télécharger et l’utiliser en offline.
      – Soit tu intégres ta base en MySql et tu redeveloppe ton appli en php.

      @+
      Sebastien FONTAINE

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *