Exemple de connexion client-serveur tcp et udp

Soyez le premier à donner votre avis sur cette source.

Vue 21 364 fois - Téléchargée 7 501 fois

Description

Voici un code documenté afin de donner un exemple simple d'utilisation des socket via Tcp et Udp. Que cela soit en mode client ou serveur.

Le code, l'exe et surtout la documentation se trouvent à l'adresse suivante :

http://www.frameip.com/vb_mode_tcp_udp/

_SebF

http://www.frameip.com
Un site pour les spécialistes IP

Source / Exemple :


En TCP
-------------

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

En UDP
-------------
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

Conclusion :


Le code, l'exe et surtout la documentation se trouvent à l'adresse suivante :

http://www.frameip.com/vb_mode_tcp_udp/

_SebF

http://www.frameip.com
Un site pour les spécialistes IP

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cognicase
Messages postés
63
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
13 juillet 2005
-
Pis qui nous dit que ce site n'est pas un virus ...
Je dit cela car je me suis déjà fait avoir comme ca ...
Alors met donc ta source sur le site et si tu est sérieux ben ca vas me faire plaisir de regarder cela ...
Ne prend pas ca pour une critique je suis juste devenu peureux depuis quelque temps ..
_sebf
Messages postés
42
Date d'inscription
jeudi 1 avril 2004
Statut
Membre
Dernière intervention
7 octobre 2006
-
Voilà, n'est plus peur, j'ai mis le code directement sur le site.

_SebF

http://www.frameip.com
Un site pour les spécialistes IP
daetips
Messages postés
142
Date d'inscription
jeudi 10 juillet 2003
Statut
Membre
Dernière intervention
10 novembre 2007
-
Merci je ne connaissait pas du tout l'udp. Je vais examiner le code
MadM@tt
Messages postés
2215
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009
-
Pour nous programmeur, je parle du coté pratique et pas théorique, c'est quoi la différence entre TCP et UDP (y'en a un plus rapide qu'un autre ?)
_sebf
Messages postés
42
Date d'inscription
jeudi 1 avril 2004
Statut
Membre
Dernière intervention
7 octobre 2006
-
Salut,

Je vais essayer de résumer le plus simplement possible les différences entre Tcp et Udp.

Tcp est aussi appelé "mode connecté", car avant de s'échanger les informations, les machines ouvre une session Tcp.

Udp, au contrario, est appelé "mode non connecté", car l'envoi de donnée se fait directement s'en vérification d'envoi ni de réception.

Tcp est donc plus sécurisé alors qu'Udp est plus temps réel.

En espérant que cela va t'aider.


_SebF

http://www.frameip.com
Un site pour les spécialistes IP

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.