begin process at 2012 02 16 20:09:58
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseau & Internet

 > SERVEUR TELNET (MULTI-CLIENTS)

SERVEUR TELNET (MULTI-CLIENTS)


 Information sur la source

Note :
Aucune note
Catégorie :Réseau & Internet Niveau :Initié Date de création :21/05/2003 Date de mise à jour :21/05/2003 17:08:58 Vu / téléchargé :4 956 / 554

Auteur : facdaar

Ecrire un message privé
Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

 Description

J'ai eu besoin de débugguer une appli sur un PC distant. Celui-ci disposait de telnet (ligne de commande telnet + adresse de la machine). Alors j'ai fait un serveur telnet (port 23) en utilisant Winsock. Ce serveur accepte 10 clients max en même temps.
c'est un contrôle ActiveX, à poser dans une feuille de votre projet.

Source

  • VERSION 5.00
  • Object = "{248DD890-BB45-11CF-9ABC-0080C7E7B78D}#1.0#0"; "MSWINSCK.OCX"
  • Begin VB.UserControl TelnetMultiServer
  • ClientHeight = 4635
  • ClientLeft = 0
  • ClientTop = 0
  • ClientWidth = 3075
  • ScaleHeight = 4635
  • ScaleWidth = 3075
  • Begin VB.TextBox txtState
  • Height = 350
  • Index = 0
  • Left = 120
  • Locked = -1 'True
  • TabIndex = 0
  • Top = 120
  • Width = 2775
  • End
  • Begin VB.Timer tmStateCheck
  • Left = 3180
  • Top = 105
  • End
  • Begin MSWinsockLib.Winsock TcpServer
  • Index = 0
  • Left = 3195
  • Top = 645
  • _ExtentX = 741
  • _ExtentY = 741
  • _Version = 393216
  • End
  • End
  • Attribute VB_Name = "TelnetMultiServer"
  • Attribute VB_GlobalNameSpace = False
  • Attribute VB_Creatable = True
  • Attribute VB_PredeclaredId = False
  • Attribute VB_Exposed = False
  • Option Explicit
  • Private Const nMAX_CLIENTS As Integer = 10
  • Private IndexUsed(nMAX_CLIENTS) As Boolean
  • Private LastReceivedData(nMAX_CLIENTS) As String
  • Private MemoServerState(nMAX_CLIENTS) As Integer
  • Event ClientConnected(RemoteIP As String, index As Integer)
  • Event DataFromClient(Data As String, index As Integer)
  • Private Sub UserControl_Initialize()
  • Dim ServerIndex As Integer
  • ' Paramètres de la connexion
  • TcpServer(0).Protocol = sckTCPProtocol
  • TcpServer(0).LocalPort = 23
  • TcpServer(0).Listen
  • IndexUsed(0) = True
  • ' Paramètres du timer
  • tmStateCheck.Interval = 500
  • tmStateCheck.Enabled = False
  • ' Init
  • For ServerIndex = 0 To nMAX_CLIENTS
  • MemoServerState(ServerIndex) = -1
  • Next ServerIndex
  • End Sub
  • Private Sub UserControl_InitProperties()
  • ' Si le conteneur du contrôle est en mode création,
  • ' désactivation du timer, qui perturbe le fonctionnement du contrôle.
  • tmStateCheck.Enabled = Ambient.UserMode
  • End Sub
  • Private Sub UserControl_ReadProperties( _
  • PropBag As PropertyBag)
  • ' Si le conteneur du contrôle est en mode création,
  • ' désactivation du timer, qui perturbe le fonctionnement du contrôle.
  • tmStateCheck.Enabled = Ambient.UserMode
  • End Sub
  • Private Sub UserControl_Terminate()
  • Dim ServerIndex As Integer
  • tmStateCheck.Enabled = False
  • For ServerIndex = 1 To nMAX_CLIENTS
  • If IndexUsed(ServerIndex) Then
  • TcpServer(ServerIndex).Close
  • Unload TcpServer(ServerIndex)
  • Unload txtState(ServerIndex)
  • IndexUsed(ServerIndex) = False
  • End If
  • Next ServerIndex
  • TcpServer(0).Close
  • End Sub
  • Private Sub TcpServer_ConnectionRequest( _
  • index As Integer, _
  • ByVal requestID As Long)
  • Dim FreeServerIndex As Integer
  • If index = 0 Then
  • ' Recherche d'un numéro libre
  • FreeServerIndex = 1
  • Do
  • If IndexUsed(FreeServerIndex) = False Then Exit Do
  • FreeServerIndex = FreeServerIndex + 1
  • ' On n'accepte pas plus de nMAX_CLIENTS
  • If FreeServerIndex > nMAX_CLIENTS Then Exit Sub
  • Loop
  • ' Numéro libre trouvé
  • IndexUsed(FreeServerIndex) = True
  • Load TcpServer(FreeServerIndex)
  • Load txtState(FreeServerIndex)
  • txtState(FreeServerIndex).Top = 120 + (FreeServerIndex * 400)
  • txtState(FreeServerIndex).Visible = True
  • TcpServer(FreeServerIndex).LocalPort = 0
  • TcpServer(FreeServerIndex).Listen
  • ' Vérifie que le serveur est prêt
  • If TcpServer(FreeServerIndex).State = sckListening Then
  • ' Ferme l'attente d'autres clients
  • TcpServer(FreeServerIndex).Close
  • ' Accepte la demande de connexion avec le paramètre requestID
  • TcpServer(FreeServerIndex).Accept requestID
  • End If
  • End If
  • End Sub
VERSION 5.00
Object = "{248DD890-BB45-11CF-9ABC-0080C7E7B78D}#1.0#0"; "MSWINSCK.OCX"
Begin VB.UserControl TelnetMultiServer 
   ClientHeight    =   4635
   ClientLeft      =   0
   ClientTop       =   0
   ClientWidth     =   3075
   ScaleHeight     =   4635
   ScaleWidth      =   3075
   Begin VB.TextBox txtState 
      Height          =   350
      Index           =   0
      Left            =   120
      Locked          =   -1  'True
      TabIndex        =   0
      Top             =   120
      Width           =   2775
   End
   Begin VB.Timer tmStateCheck 
      Left            =   3180
      Top             =   105
   End
   Begin MSWinsockLib.Winsock TcpServer 
      Index           =   0
      Left            =   3195
      Top             =   645
      _ExtentX        =   741
      _ExtentY        =   741
      _Version        =   393216
   End
End
Attribute VB_Name = "TelnetMultiServer"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Option Explicit

Private Const nMAX_CLIENTS As Integer = 10
Private IndexUsed(nMAX_CLIENTS) As Boolean
Private LastReceivedData(nMAX_CLIENTS) As String
Private MemoServerState(nMAX_CLIENTS) As Integer

Event ClientConnected(RemoteIP As String, index As Integer)
Event DataFromClient(Data As String, index As Integer)

Private Sub UserControl_Initialize()
    Dim ServerIndex As Integer
    
    ' Paramètres de la connexion
    TcpServer(0).Protocol = sckTCPProtocol
    TcpServer(0).LocalPort = 23
    TcpServer(0).Listen
    IndexUsed(0) = True
    ' Paramètres du timer
    tmStateCheck.Interval = 500
    tmStateCheck.Enabled = False
    ' Init
    For ServerIndex = 0 To nMAX_CLIENTS
        MemoServerState(ServerIndex) = -1
    Next ServerIndex
End Sub

Private Sub UserControl_InitProperties()
    ' Si le conteneur du contrôle est en mode création,
    ' désactivation du timer, qui perturbe le fonctionnement du contrôle.
    tmStateCheck.Enabled = Ambient.UserMode
End Sub

Private Sub UserControl_ReadProperties( _
    PropBag As PropertyBag)
    
    ' Si le conteneur du contrôle est en mode création,
    ' désactivation du timer, qui perturbe le fonctionnement du contrôle.
    tmStateCheck.Enabled = Ambient.UserMode
End Sub

Private Sub UserControl_Terminate()
    Dim ServerIndex As Integer
    
    tmStateCheck.Enabled = False
    For ServerIndex = 1 To nMAX_CLIENTS
        If IndexUsed(ServerIndex) Then
            TcpServer(ServerIndex).Close
            Unload TcpServer(ServerIndex)
            Unload txtState(ServerIndex)
            IndexUsed(ServerIndex) = False
        End If
    Next ServerIndex
    TcpServer(0).Close
End Sub

Private Sub TcpServer_ConnectionRequest( _
    index As Integer, _
    ByVal requestID As Long)
    
    Dim FreeServerIndex As Integer
    
    If index = 0 Then
        ' Recherche d'un numéro libre
        FreeServerIndex = 1
        Do
            If IndexUsed(FreeServerIndex) = False Then Exit Do
            FreeServerIndex = FreeServerIndex + 1
            ' On n'accepte pas plus de nMAX_CLIENTS
            If FreeServerIndex > nMAX_CLIENTS Then Exit Sub
        Loop
        ' Numéro libre trouvé
        IndexUsed(FreeServerIndex) = True
        Load TcpServer(FreeServerIndex)
        Load txtState(FreeServerIndex)
        txtState(FreeServerIndex).Top = 120 + (FreeServerIndex * 400)
        txtState(FreeServerIndex).Visible = True
        TcpServer(FreeServerIndex).LocalPort = 0
        TcpServer(FreeServerIndex).Listen
        ' Vérifie que le serveur est prêt
        If TcpServer(FreeServerIndex).State = sckListening Then
            ' Ferme l'attente d'autres clients
            TcpServer(FreeServerIndex).Close
            ' Accepte la demande de connexion avec le paramètre requestID
            TcpServer(FreeServerIndex).Accept requestID
        End If
    End If
End Sub
 

 Conclusion

Des événements sont générés dès qu'un client se connecte (avec son adresse IP), et si le client envoie une chaine de caractères.

Pour envoyer une chaine au client, utiliser la fonction SendData(). Vous pouvez préciser à quel client vous envoyer le message, sinon il est envoyé à tous...

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip GESTION DE PILE FIFO DANS UNE CLASSE (SANS RECORDSET)
Source avec Zip RÉCUPÉRATION DES ARGUMENTS D'UN ÉXÉCUTABLE LANCÉ EN LIGNE DE...
LIRE ET ÉCRIRE DANS LA BASE DE REGISTRE FACILEMENT QUELQUESO...
Source avec Zip CRÉER ET LIRE UN FICHIER ZIP DANS VB

 Sources de la même categorie

Source avec Zip Source avec une capture GESTIONNAIRE DE TÉLÉCHARGEMENT, AVEC REPRISE ET MULTITHREADI... par Madx23
Source avec Zip Source avec une capture CONVERTIR DU TEXTE RTF EN CODE HTML ET VICE-VERSA par vicosta
Source avec Zip Source avec une capture DICTIONAIRE TEXT/AUDIO/VISUELLE ANGLAIS AVEC WEBBROWSER CONT... par majnounmajda
Source avec Zip Source .NET (Dotnet) NSLOOKUP EN VB.NET OU COMMENT FAIRE UNE REQÛETE DNS EN PRÉCI... par ShareVB
Source avec Zip Source avec une capture MINI SEVEUR HTTP AVEC INTERFACE GRAPHIQUE ET IMPLÉMENTATIONS... par lemout

Commentaires et avis

Commentaire de EBArtSoft le 21/05/2003 12:47:55 administrateur CS

Bonjour,

Ben appel ta source "Control Serveur Telnet" alors
car avec sa on debugge rien du tout ?!?

mais sans vouloir denigrer ta source tu ne fait rien d'autre que de
rediriger les pacquet reçu sur le port 23 !

alors pourquoi en faire un control, tu peut le gerer directement a partir d'un control winsock sur une feuille !

bref je dirait juste que :
1) le titre est mal choisi
2) la source est incomplete

b@nne prog

Commentaire de facdaar le 21/05/2003 13:57:48

Je ne suis pas tout à fait d'accord.
D'abord, c'est un contrôle, parce qu'il est réutilisable, et tu peux coller ce même contrôle dans X projets différents. Ensuite, le fait d'avoir un contrôle permet de charger dynamiquement d'autres instances de ce même contrôle pour gérer n clients en même temps.
Le biut de ce contrôle est ensuite, pour débugguer ton appli, au lieu d'écrire bêtement dans un fichier texte à différents endroits de ton code, tu truffe ton code de la procédure SendData. Si un utilisateur est connecté, il reçoit la chaîne.

Maintenant tu en penses ce que tu veux.

Commentaire de EBArtSoft le 21/05/2003 15:35:54 administrateur CS

Et bien je veus pas te vexer mais...
le titre de ta source est tout de meme completement a coté de
ce que tu propose et de plus le fait de le mettre en controle
ne te permettra absolument pas de créer plusieur instance car
tu ne peut pas ouvrir deux fois le meme port en mode "Listen"
donc tes deuxieme et n-ieme controles ne marcherons pas correctement...

le code est bon je dit pas le contraire mais
j'ai tjr pas compris comment debbuger une appli avec ça ?!?

@ +

Commentaire de facdaar le 21/05/2003 17:03:45

Ce que j'en dis c'est que moi ça m'a permis de débugguer une appli. Le premier réflexe est d'écrire par exemple en chaque début de procédure dans un fichier texte, puis de récupérér le fichier texte. Là tu as les infos en live sur tes postes distants...
De plus, oui, je fais bien un chargement dynamique du contrôle Winsock que j'ai appelé TcpServer. Voir la ligne Load TcpServer.

Maintenant je veux bien admettre que c'est un serveur Telnet multi-clients, et pas un débuggeur.

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,562 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales