Programme threader sous vb6

Résolu
Leo_Robotic_Passion Messages postés 135 Date d'inscription dimanche 19 novembre 2000 Statut Membre Dernière intervention 2 décembre 2011 - 19 oct. 2007 à 01:06
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 6 nov. 2007 à 14:37
Bonsoir,
Est t'il possible de traiter sur un thread l'ecoute d'un socket TCP?
existe t'il une alternative a la programmation threader sous vb6?


Cordialement


Léo

96 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
21 oct. 2007 à 16:26
le contrôle client est fini

Option Explicit

'   OUVERTURE
FORM
Private Sub Form_Load()
'   mode du
socket
    AfUrbiSock_Cli.Mode = [Urbi Client]
End Sub

'   FERMETURE
FORM
Private Sub Form_Unload(Cancel As Integer)
'   plus besoin de fermer le socket, c'est
traité...
End Sub

'   CLICK BOUTON ACTION
Private Sub Cmd_Action_Click()
'   on bloque le
bouton
    Cmd_Action.Enabled = False

'  
action
    With AfUrbiSock_Cli
       If .state = sckConnected Then
'           connecté, on
quitte
            .CloseSocket
       ElseIf .state = sckClosed Then
'           fermé? on connecte.
nb : plus besoin de forcer le close avant
            .RemoteHost = Txt_Ip.Text
            .RemotePort = CLng(Txt_Port.Text)
            .ConnectSocket
        End If
   End With
End Sub

'   CLICK SUR
ENVOYER
Private Sub send_Click()
'   si on est connecté
on envoie les données et on les affiche
    If AfUrbiSock_Cli.SendData(Txt_Sent.Text) Then
        Call AddTxt("<Client> : " & vbCrLf & Txt_Sent.Text)
        Txt_Sent.Text = vbNullString
    Else
        If LenB(Txt_Sent.Text) = 0 Then
            Call AddTxt("<System> : " & vbCrLf & "Aucune chaîne à
envoyer")
        Else
            Call AddTxt("<System> : " & vbCrLf & "Le socket n'est pas
prêt")
        End If
    End If
End Sub

'   CONNEXION
éTABLIE
Private Sub AfUrbiSock_Cli_OnConnect()
    Call AddTxt("<System> : Connexion établie avec " & AfUrbiSock_Cli.RemoteHostIP & " !")
End Sub

'   FERMETURE
SOCKET
Private Sub AfUrbiSock_Cli_OnClose()
'  
fermeture du socket, plus besoin de re-forcer la fermeture
    Call AddTxt("<System> : Connexion terminée!")
End Sub

'   ON REçOIT UNE DATA, DéJà PARSéE
Private Sub AfUrbiSock_Cli_OnDataArrival()
'  
on affiche la valeur reçue
    With AfUrbiSock_Cli
        Call AddTxt("<" & .RemoteHostIP & "> :
" & vbCrLf & _
                                  "Code : " & CStr(.ValueCode) & vbCrLf & _
                                  "Tag : " & .ValueTag & vbCrLf & _
                                  "Message : " & .ValueMessage)
    End With
End Sub

'   ERREUR DU SOCKET
Private Sub AfUrbiSock_Cli_OnError(ByVal Number As Integer, Description As String)
    Call AddTxt("<System> : " & vbCrLf & "Erreur de socket -
n°" & CStr(Number) & vbCrLf & Description)
'   plus besoin de fermer....
End Sub

'   ETAT DU SOCKET
CHANGE
Private Sub AfUrbiSock_Cli_OnStateChanged(ByVal
iState As StateConstants, sState As
String)
    Me.Caption = "Urbi Client - Etat :
" & sState
    If iState = sckClosed Or iState = sckConnected Then
        Cmd_Action.Enabled = True
    Else
        Cmd_Action.Enabled = False
    End If
End Sub

'   AJOUTE DU
TEXTE
Private Sub AddTxt(ByVal sText As String)
    Txt_Received.Text = Txt_Received.Text & sText & vbCrLf
& vbCrLf
    Txt_Received.SelStart = Len(Txt_Received.Text)
End Sub

çà donne çà capitaine...

je te laisse bosser un peu sur le serveur
@+

PCPT [AFCK]
Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
Leo_Robotic_Passion Messages postés 135 Date d'inscription dimanche 19 novembre 2000 Statut Membre Dernière intervention 2 décembre 2011
21 oct. 2007 à 21:07
J'avoues

être perdu dans le code voici ce que j'ai pu reconstruire du client ICI mais c'est loin d'être complet et je ne sais plus comment procéder !<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>





C'est là que je me rends compte que de prendre des morceaux de code à droite et à gauche ce n'est pas programmé !





Certes je suis amateur et joue avec vb pour le plaisir, mais je viens de prendre une grande claque sur ce que je croyais connaître en vb !





Mes bases ne sont même pas solides. Mes lacunes sont énormes





Je vais devoir reprendre depuis le début si je veux vraiment continuer à jouer avec vb





Pour ce qui est du projet je dois me rendre à l'évidence c'est largement au-dessus de mes compétences « et moi qui me suis dit cool c'est seulement un simple socket »





Alors, je vois 2 possibilités ! Soit PCPT daigne bien vouloir me passer son code s'il n'a pas peur d'être harcelé avec mes questions sur le code, car je veux vraiment comprendre bien que pour l'utilisation de ce soft la création de commande soit vraiment basique.





 Soit on continue sur cette lancée mais, ça risque d'être assez long et il me faudra beaucoup plus de détails et d'explications.





Je reste motivé, car ce projet me tien vraiment a coeur !





Voilà, un peu honteux mais bon avec du travail ! Beaucoup de travail rien n'est impossible !
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
21 oct. 2007 à 22:22
le code CLIENT fourni est déjà complet.
il manque évidemment l'ocx...

-ent), par ex.: les gens disent. A vous de vérifier!" mce_serialized= "78">Soit PCPT
daigne bien vouloir me passer son code s'il n'a pas peur d'être harcelé
avec mes questions (...)
Soit on continue sur cette lancée mais (...) il me faudra beaucoup plus de détails et d'explications.

dans les 2 cas je me fais harceler quoi ^^
alors on va prendre le 3e choix :
je réponds à tes questions si je peux, et je ne te fourni ni l'ocx, ni la moindre ligne de code TANT QUE TU N'AURAS PAS RETOUCHé AU SERVEUR !!!

passé un certain délai (que tu fixeras), on fera le point ensemble.
et pourquoi pas éventuellement poster l'OCX, te permettant ainsi de ne te consacrer qu'à ton code sans forcément rentrer dans les méandres des sockets...

marché honnête?
<hr size ="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
Leo_Robotic_Passion Messages postés 135 Date d'inscription dimanche 19 novembre 2000 Statut Membre Dernière intervention 2 décembre 2011
22 oct. 2007 à 00:09
Ca me va je tente le défi ^^


On va commencer par les questions alors :D


Le serveur utilise aussi l’OCX ?


Pourrais-je avoir quelques infos sur les obligations de ce serveur par rapport au client ?


Apparemment la on a pas  a envoyer de séparateur en fin d'envoi ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
22 oct. 2007 à 01:09
Le serveur utilise aussi l'OCX ?


il devra mais pas encore, là c'est juste ton appli serveur...

Pourrais-je avoir quelques infos sur les obligations de ce serveur par rapport au client ?
euh.... oui tu peux
précise ta question ;)

Apparemment la on a pas  a envoyer de séparateur en fin d'envoi ?
en effet "pour le moment" puisque tu vas poser des questions demain, je n'ai donc pas mis de séparateur pour le moment, et donc pas utilisé de buffer. revoir fin page 2 du ce topic concernant le messafe à parser, dont le fin avec POINT par exemple....
le séparateur peut très bien être "." & vbcrlf, à toi de me le dire

Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
Leo_Robotic_Passion Messages postés 135 Date d'inscription dimanche 19 novembre 2000 Statut Membre Dernière intervention 2 décembre 2011
22 oct. 2007 à 12:48
Bon comme je l’ai dis dans l’un de mes poste précédent je reprend depuis le début !


Je vais décrire précisément ce que je fais.


Si à un moment tu voix que je m’égare où que ma logique n’est pas la bonne n’hésite pas à intervenir



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 




Pour commencer je vais donc placer 1 winsock sur ma feuille que je vais renommer en AfUrbiSock_Ser pour être en harmonie avec celui du client nommé «AfUrbiSock_Cli »



PCPT du as placé « Af » devant pour une raison particulière ?






 






Coté code :






‘Sur l’événement d’ouverture de mon form "ma feuille"





 

Private Sub Form_Load()






‘Je place le ctrl "Winsock" sur le port 54000


 

AfUrbiSock_Ser
.LocalPort =54000






‘Je le met en écoute


 

AfUrbiSock_Ser
.Listen
 End Sub






 







‘Quand le serveur reçoit l’appel il déclenche l'événement "
AfUrbiSock_Ser
_ConnectionRequest(ByVal requestID As Long)"





 
Private Sub

AfUrbiSock_Ser
_ConnectionRequest(ByVal requestID As Long)






‘Je ferme l'écoute du serveur


 

AfUrbiSock_Ser
.Close






‘Je répond. Le serveur est prêt à correspondre


 

AfUrbiSock_Ser
.Accept requestID
 End Sub






 








AfUrbiSock_Ser
reçoit quelque chose et déclenche DataArrival







 Private Sub
AfUrbiSock_Ser
_DataArrival(ByVal bytesTotal As Long)






‘Je déclare Data la il sera reconnu dans ma fonction


 Dim data As String






‘Je récupère par GetData ce que
AfUrbiSock_Ser


a reçu.

 

AfUrbiSock_Ser
.GetData data






‘Je l’affiche par un simple message box pour vérifier la bonne réception de data


 MsgBox data
 End Sub
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
22 oct. 2007 à 13:26
salut,

jusque là çà va.
à noter que tu ne gères alors qu'un seul client simultané (pour le moment, ok)
mets tout de même un close avant le listen

AfUrbiSock_Cli n'est pas un winsock mais bien un usercontrol

tu peux t'en tendre compte dans le code fourni par cet évènement par exemple :
AfUrbiSock_Cli_OnStateChanged
qui n'existe pas dans le winsock
de même que le DataArrival qui comence par "On" (comme tous les events) et qui ne retourne pas bytesTotal

il commence par Af parce que PCPT est mon pseudo, AFCK ma signature, simplement

Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
Leo_Robotic_Passion Messages postés 135 Date d'inscription dimanche 19 novembre 2000 Statut Membre Dernière intervention 2 décembre 2011
22 oct. 2007 à 19:46
Re Bonjour PCPT



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 

Bon pour gérer la multi-connexion j’ajoute un 2eme contrôle winsock au serveur que je vais nommer New_AfUrbiSock_Ser avec la propriété « Index » à 0



J’ajoute une variable public que je nomme « Af », en hommage a mon mentor et je l’initialise  à 0 dans mon form_load.





Je modifie ma Sub ConnectionRequest !


Je ne close pas mon 1er contrôle winsock pour laisse le serveur en écoute donc je met en commentaire : AfUrbiSock_Ser .Close


Comme c’est mon nouveau contrôle winsock qui va répondre je met aussi en commentaire :  AfUrbiSock_Ser .Accept requestID


Je recode ma Sub ConnectionRequest et je créé une sub Close pour mon nouveau contrôle winsock.



Je change aussi La sub DataArrival qui était sur mon 1er contrôle winsock «AfUrbiSock_Ser »  pour qu’elle soit sur le 2eme « New_AfUrbiSock_Ser »



Voir les sub AfUrbiSock_Ser _ConnectionRequest , New_AfUrbiSock_Ser _Close et New_AfUrbiSock_Ser_DataArrival



 





'Sur l'événement d'ouverture de mon form "ma feuille"


Private Sub Form_Load()


Af = 0



'Je place le ctrl "Winsock" sur le port 54000 
AfUrbiSock_Ser .LocalPort =54000



'Je le met en écoute 
AfUrbiSock_Ser .Listen
End Sub



 





'Quand le serveur reçoit l'appel il déclenche l'événement " AfUrbiSock_Ser _ConnectionRequest(ByVal requestID As Long)"

Private Sub AfUrbiSock_Ser _ConnectionRequest(ByVal requestID As Long)





'Je ferme l'écoute du serveur


‘AfUrbiSock_Ser .Close



'Je répond. Le serveur est prêt à correspondre


‘AfUrbiSock_Ser .Accept requestID





‘Je repère les nouveaux clients





Af=Af+1





‘Je
charge un nouveau contrôle Winsock


Load New
_AfUrbiSock_Ser
(Af)





‘Je me connecte au client appellant

New
_AfUrbiSock_Ser
(Af).Accept requestID

End Sub






 






‘Je décharger de la mémoire les ctrl winsock des client qui se déconnecte





Private Sub New
_AfUrbiSock_Ser
_Close(Index As Integer)





‘Je vide les index clients


Unload New
_AfUrbiSock_Ser
(Index)





‘Je rénisialise


If New
_AfUrbiSock_Ser
.count=0 then Af=0
End Sub









 







 



'
New
_
AfUrbiSock_Ser reçoit quelque chose et déclenche DataArrival

Private Sub
New
_AfUrbiSock_Ser


_DataArrival(ByVal bytesTotal As Long)





'Je déclare Data la il sera reconnu dans ma fonction

Dim data As String



'Je récupère par GetData ce que
New
_
AfUrbiSock_Ser a reçu.

New
_
AfUrbiSock_Ser .GetData data



'Je l'affiche par un simple message box pour vérifier la bonne réception de data

MsgBox data
End Sub



 




Je n’ai pas ajouté un close avant le listen comme tu me l’avais conseillé, car il me semble qu’avec mes dernières modifications le serveur doit rester en écoute !
0
Leo_Robotic_Passion Messages postés 135 Date d'inscription dimanche 19 novembre 2000 Statut Membre Dernière intervention 2 décembre 2011
22 oct. 2007 à 19:48
Désolé mes commentaires ne sont pas restés en vert ! Tu peux peut être arranger ça ?


Merci d’avance
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
22 oct. 2007 à 20:39
tu fais fausse route

ta conception du Listen, Accept et ConnectionRequest sont .... étranges

regarde dans les sources de Celiphane (je crois), tu y trouveras un tuto (classé dans les sources) qui devrait t'aider

ps : je ne peux pas modifier les posts et si je le pouvais j'ai d'autres trucs à faire que de colorier les comms, çà me prend déjà assez de temps de colorier les miens ^^
Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
Leo_Robotic_Passion Messages postés 135 Date d'inscription dimanche 19 novembre 2000 Statut Membre Dernière intervention 2 décembre 2011
22 oct. 2007 à 23:07
Je ne voix vraiment ou je fait fausse route !


Je viens juste d’ajouter (Index) a New_AfUrbiSock_Ser.GetData data de ma sub DataArrival, ce qui donne New_AfUrbiSock_Ser (Index).GetData data.


J’ai beau comparé avec le tuto de celiphane je ne vois pas ou sont mes erreurs !


Suis-je vraiment a coté de ce qui devrait être fait ?


Help
0
Leo_Robotic_Passion Messages postés 135 Date d'inscription dimanche 19 novembre 2000 Statut Membre Dernière intervention 2 décembre 2011
23 oct. 2007 à 14:12
Bonjour PCPT et a tous ceux qui suivent ce sujet.

Bon vu que j'ai des soucis avec la gestion de la multi connexion, j'ai mis de côté cette étape et suis revenu au code du 22/10/2007 12:48:39.

Je ne suis pas sûr qu'il y ait un intérêt à gérer cette multi connexion ! Je ne pense pas que 2 clients vont se connecter en même temps au robot ! Cela risque de le perturber un peu lol.

Mais pour le côté pédagogique j'aimerais savoir comme gérer cet événement.



Alors,


voilà où j'en suis :<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
Option Explicit







'Sur l'événement d'ouverture de mon form "ma feuille"
Private Sub Form_Load()
'   Initialisation des variables
  Txt_Ip = Txt_Ip.Text
  Txt_Port = Txt_Port.Text
End Sub







Sub trait_erreur()
'   en cas d'erreur, ajoute la description au tableau
    List_Erreur.AddItem (Err.Description)
End Sub







Private Sub Bt_Fermer_Click()
'   fermeture du serveur
    AfUrbiSock_Ser.Close
End Sub







Private Sub Bt_Ecoute_Click()
'   passe le serveur en mode 'ecoute'
    On Error GoTo List_Erreur
    AfUrbiSock_Ser.RemoteHost = Txt_Ip
    AfUrbiSock_Ser.LocalPort = Txt_Port
    AfUrbiSock_Ser.Listen
    Exit Sub
List_Erreur:
trait_erreur
End Sub







Private Sub Bt_Envoyer_Click()
'   envoi de texte à partir du serveur
    On Error GoTo List_Erreur
    AfUrbiSock_Ser.SendData (Txt_Saisie)
    Txt_Saisie = ""
    Exit Sub
List_Erreur:
trait_erreur
End Sub







Private Sub Timer1_Timer()
'   toutes les secondes, afficher l'etat des controles
    Txt_Statue = Str(AfUrbiSock_Ser.state) + " - " + Etat(AfUrbiSock_Ser.state)
End Sub
Function Etat(state)
'   renvoyer en clair l'etat des controles
    Select Case state
        Case 0
            Etat = "Fermé"
        Case 1
            Etat = "Ouvert"
        Case 2
            Etat = "A l'écoute"
        Case 3
            Etat = "Connexion en attente"
        Case 4
            Etat = "Hote en cours de résolution"
        Case 5
            Etat = "Hote résolu"
        Case 6
            Etat = "En cours de connexion"
        Case 7
            Etat = "Connecté"
        Case 8
            Etat = "Le correspondant a racroché"
        Case 9
            Etat = "Erreur"
    End Select
End Function

Private Sub Bt_Vider_Click()
'   vider le tableau des erreurs
    List_Erreur.Clear
End Sub








'Quand le serveur reçoit l'appel il déclenche l'événement " AfUrbiSock_Ser _ConnectionRequest(ByVal requestID As Long)"
Private Sub AfUrbiSock_Ser_ConnectionRequest(ByVal requestID As Long)
    On Error GoTo List_Erreur
'   pour accepter, le serveur doit etre fermé
    AfUrbiSock_Ser.Close
'   Le serveur accepte
    AfUrbiSock_Ser.Accept requestID
    Exit Sub
List_Erreur:
trait_erreur
End Sub








'Quand le serveur reçoit l'appel il déclenche l'événement " AfUrbiSock_Ser _ConnectionRequest(ByVal requestID As Long)"
Private Sub AfUrbiSock_Ser_DataArrival(ByVal bytesTotal As Long)
'   Je déclare Data la il sera reconnu dans ma fonction
    Dim Data  As String
'   Je récupère par GetData ce que AfUrbiSock_Ser a reçu.
    AfUrbiSock_Ser.GetData Data
'   Je traite et j'affiche
    Txt_Reception = Txt_Reception & vbCrLf & Data & vbCrLf
    Txt_Reception.SelStart = Len(Txt_Reception.Text)
End Sub







Private Sub AfUrbiSock_Ser_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)
'   le serveur renvoi une erreur
    List_Erreur.AddItem (Description)
End Sub
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
23 oct. 2007 à 19:10
ok... et quelle est la question? ^^
0
Leo_Robotic_Passion Messages postés 135 Date d'inscription dimanche 19 novembre 2000 Statut Membre Dernière intervention 2 décembre 2011
23 oct. 2007 à 20:28
Citation :



Je réponds à tes questions si je peux et je ne te fourni ni l'ocx, ni la moindre ligne de code TANT QUE TU N'AURAS PAS RETOUCHé AU SERVEUR !!!



Passé un certain délai (que tu fixeras), on fera le point ensemble.


Comme tu me l'as demandé j'ai repris le serveur ! Est-ce que cela te convient ?


Peut on fair le point ensemble ou penses tu que c'est encore trop tôt ?


Bon pour ce qui est des réponses que j'attends ! Je n'ai pas encore eu de nouvelles de Mr JC Baillie, mais j'avais envoyé un exemplaire de ces questions a rt15 qui avait regardé aux sources c++ pour moi.



Voici les questions et ces réponses:<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>






 






>Y a-t-il une gestion particulière des paquets ? Pour les gros paquets par exemple.
Je n'ai pas vu de gestion particulière pour les paquets. A priori, tu n'auras pas de problème de taille maximale de paquets.









>Y a-t-il une gestion de l'envoi en plusieurs fois ?
Je n'ai pas vu de gestion de l'envoie en plusieurs fois.









>Y a-t-il  une gestion de début ou de fin de message particulière ? Séparateur ou autre.
Je n'ai pas vu de séparateurs.







>Les messages on t-il toujours la même structure exemple : le message (après le header) se termine toujours par un POINT VIRGULE et il contient toujours 2CHIFFRES_POINT_6CHIFFRES
Non je pense pas.









>Y a-t-il un temps à respecter après un envoi et après une réception ?






TCP se charge de déterminer une vitesse d'envoie de paquet qui sastisfait les deux partis. Donc tu ne devrais pas avoir à te soucier de ça.



 
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
23 oct. 2007 à 21:53
re

Comme tu me l'as demandé j'ai repris le serveur ! Est-ce que cela te convient ?
euh... oui çà me convient mais le pb c'est qu'au final si tu es passé du multiconnexion au monoconnexion, c'est que le principe de fonctionnement n'est pas encore établi et que tu ne t'es basé que sur des code trouvé et c/c ...

enfin bref admettons, partons sur cette base??
il n'y a pas la gestion de reconnexion, le gestionnaire d'erreur n'est pas vidé. à part çà (après survol) çà semble ok

as-tu essayé avec ton client?

ps : Txt_Ip = Txt_Ip.Text? çà représete quoi pour toi?
++
Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
Leo_Robotic_Passion Messages postés 135 Date d'inscription dimanche 19 novembre 2000 Statut Membre Dernière intervention 2 décembre 2011
24 oct. 2007 à 01:46
euh... oui çà me convient mais lepb c'est qu'au final si tu es passé du multiconnexionau monoconnexion, c'est que le principe de fonctionnement n'est pas encore établi et que tu ne t'es basé que sur des code trouvé et c/c ...
<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>






Je suis passé en mono connexion suite à l'échec de mon code précédent ! Je me suis basé en majeur partie sur le tuto de Celiphane comme tu me l'as conseillé, mais il y a sûrement quelque chose que je n'ai pas compris ou tous simplement que j'ai une mauvaise logique puisque tu ma dis que je fessais fausse route !





J'ai continué mon code ne comprennent pas où je m'égarais sans lamulti connexion  pour avancer le projet ! « J'espère toujours une explication »





 Il est vrai que je me suis basé sur ce qu'on peut trouver sur vbfrance en plus du tutos de Celiphane ! J'ai repris quelque astuces que je ne connaissais pas, mais de la à dire que c'est c/c... !






Il n'y a pas la gestion de reconnexion









Je peux remettre la gestion de connexion dans l'événement close de mon winsock






 




 






Private Sub AfUrbiSock_Ser_Close()





'   passe le serveur en mode 'ecoute'






   

On Error GoTo List_Erreur






    AfUrbiSock_Ser.RemoteHost = Txt_Ip






   

AfUrbiSock_Ser.LocalPort = Txt_Port






    AfUrbiSock_Ser.Listen






    Exit Sub





List_Erreur:





trait_erreur








End Sub






 






Mais dans ce cas la :






 






Private Sub Bt_Fermer_Click()





'   fermeture du serveur






    AfUrbiSock_Ser.Close





End Sub






 






N’a plus lieux d’être !!! Heu je croix que je fait encore une fois fausse route 






 







Le gestionnaire d'erreur n'est pas vidé







 






J’ai un bouton avec «    List_Erreur.Clear » 






 






Je peux le placer dans ma gestion de la connexion :






 






Private Sub Bt_Ecoute_Click()





'   passe le serveur en mode 'ecoute'






   

On Error GoTo List_Erreur






    AfUrbiSock_Ser.RemoteHost = Txt_Ip






   

AfUrbiSock_Ser.LocalPort = Txt_Port






    AfUrbiSock_Ser.Listen






    Exit Sub





List_Erreur:





trait_erreur





List_Erreur.Clear 





End Sub






 






Cela suffit il ?






 







Txt_Ip = Txt_Ip.Text
? çà représete quoi pour toi?







 






Txt_Ip est le non de mon TextBox et .Text renvois a la propriété text de ce TextBox.





Le fait d’appeler mon ‘indice d’appel Txt_Ip n’est peux t’être pas le mieux j’aurais pu choisir un truc plus significatif du genre :






 






AdresseIP = Txt_Ip.Text






 






Ma démarche aurait pu causer conflit c’est vrai
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
24 oct. 2007 à 07:19
que de points d'exclamation !!! ne t'énerve pas, je ne t'attaquais pas!
je pensais juste que tu reprenais en mono-cnx pour voir si c'était correct puis re-multiconnexion.

ta question était donc là, ok. je regarderai çà ce soir.
le c/c (en général) est de toute façon une base, c'est pas évident de comprendre les subtilités d'un composant, idem pour le choix des dev....
Txt_Ip Txt_Ip.Text> a=a
pareil

et pour mémoire je t'avais dit que j'aurais plus de temps à partir de dimanche

bonne journée
PCPT  [AFCK]
Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
Leo_Robotic_Passion Messages postés 135 Date d'inscription dimanche 19 novembre 2000 Statut Membre Dernière intervention 2 décembre 2011
24 oct. 2007 à 20:39
Bonsoir,
que de points d'exclamation !!! ne t'énerve pas, je ne t'attaquais pas! <?xml:namespace prefix v ns "urn:schemas-microsoft-com:vml" /??><v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id="_x0000_i1025" style="WIDTH: 11.25pt; HEIGHT: 11.25pt" alt="" type="#_x0000_t75"><v:imagedata o:href="http://www.vbfrance.com/imgs2/smile_wink.gif" src="file:///C:\DOCUME~1\LO4751~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"></v:imagedata></v:shape>
je pensais juste que tu reprenais en mono-cnx pour voir si c'était correct puis re-multiconnexion.






 






Pas d’inquiétude je n’avais pas pris tes remarques comme une attaque ! Juste qu’on ne c’étaient pas compris !






 







Ta question était donc là, ok. Je regarderai çà ce soir.







 






Merci c’est sympa






 







et pour mémoire je t'avais dit que j'aurais plus de temps à partir de dimanche







 






Oui pas de problème de ce coté la. Ce n’est pas parce que je pose une question que j’attends que tu me répondes tous de suite bien que ça soit souvent le cas et c’est tous à ton honneur !






 






Bon si non j’ai reçu la réponse que j’attendais de Mr Baillie






 






Voici dans l’ordre mes questions et ses Réponses :






 





Y a-t-il une gestion particulière des paquets ? Pour les gros paquets par exemple.


Y a-t-il une gestion de l'envoi en plusieurs fois ?


Y a-t-il une gestion de début ou de fin de message particulière ? Séparateur ou autre.


Les messages on t-il toujours la même structure exemple : le message (après le header) se termine toujours par un POINT VIRGULE et il contient toujours 2CHIFFRES_POINT_6CHIFFRES


Y a-t-il un temps à respecter après un envoi et après une réception ?


Le serveur urbi gère t’il la multi connexion ?



 





Il n'y a rien de particulier dans le "protocole", tout se passe exactement comme si tu envoyais du code URBI en telnet. Il n'y a pas à segmenter avec des ; ni rien dans le genre: c'est à l'utilisateur d'écrire des chaines valides avant de les envoyer dans le reseau.






 





Oui, il peut etre utile d'avoir un buffer d'entrée pour segmenter les envois en petits blocs, mais la taille max d'un envoi est en général retourné par la fonction système qui envoi le packet (elle te dit: "j'ai envoyé 17 octets", à toi de faire tes comptes de ton coté pour dépiler 17 octets de ton buffer).






 





Essentiellement, pour te guider, je te dirais qu'il s'agit de réécrire un telnet en VB. Je suis sur que tu peux trouver plein de doc sur ce sujet classique sur le net.






 





Oui, bien sur tu peux avoir 2, 10 ou 100 clients en meme temps. Tu as egalement des modes de superposition, tel les "blend mode" pour gérer les accès conflictuels. Cf la doc sur ce sujet.






 





http://www.gostai.com/doc.php






 





Notamment Liburbi 1.0
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
24 oct. 2007 à 21:50
bonsoir Léo

à la relecture de ton précédent code multi, tu faisais fausse route essentiellement pour la gestion dynamique du load, sans tenir compte (compteur) de QUEL index serait libéré.

pour le close je parlais "avant" le listen, que tu n'as pas non plus pris en compte en monocnx

la gestion de fermeture (client coupe ou est coupé) n'est pas faite, et le multicnx tu ne traites pas "éventuellement" l'envoie de msg en masse, donc à tous les connectés

le principe essentiel à retenir est le suivant

le serveur écoute
un client appel
le serveur reçoit, il accepte sur UN PORT libre, sur un autre socket

en fait (multi) il a d'autres socket fermés, et le 0 (ou _listener ou autre) force un socket fermé à accepter (le requestid)
de la la cnx est établie sur l'autre socket, le premier reste néanmoins toujours en écoute.
il n'y a pas de conflit puisqu'il n'est pas connecté, c'est l'autre, selon l'ID, qui reçoit les bons messages

à la fermeture (client ou serveur vers un seul client) il faut proprement fermer la cnx, et soit déloader le socket soit le "freezer" de manière à savoir quel socket est dispo. ainsi pour 100 clients se connectant 2 fois (200 cnx) on ne créé pas 200 contrôles.

voir cette source (que j'intègrerai) pour comprendre plus en profondeur

cette concepton t'est peut-être acquise mais ton code ne le démontrait pas ...

pour la gestion d'erreur, ERR est le gestionnaire
tu as ta sub pour ajouter à la listbox, mais ERR contient toujour l'erreur. quand je disais de le vider je parlais du gestionaire, donc err.clear, pas de l'affichage avec la listbox

je teste de suite pour voir (j'ai un doute) si on sait si le paquet reçu est complet et te tiens informé

je ne sais pas si j'ai répondu à toutes tes questions, n'hésite pas
++ ;)
Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
Leo_Robotic_Passion Messages postés 135 Date d'inscription dimanche 19 novembre 2000 Statut Membre Dernière intervention 2 décembre 2011
24 oct. 2007 à 22:54
voir cette source (que j'intègrerai) pour comprendre plus en profondeur


OuhaOu Impressionnant ! J'ai eu du mal un peu au début avec ce concept !


Le fait que tu es fait une représentation graphique des possibilités de ton source et vraiment ingénieux et montre très clairement ses possibilités !


Je te trouve très dur avec toi-même en ayant classé cette source dans le niveau débutant !



Je sais pas pourquoi tous d'un coup je me sents tous petit !


En tous cas ça forge le respect.




cette conception t'est peut-être acquise mais ton code ne le démontrait pas ...


Je suis conscient que mon problème n'est pas lié à la compréhension du mode de fonctionnement du composant winsock et de tout ce qu'on a abordé autour ! Je vois ce qu'il faut faire, mais de la a le mettre en application spontanément j'ai encore du travail et surtout beaucoup à apprendre de vb.


Peut être mettre un peu plus de rigueur, mais surtout apprendre je pense avoir été trop vite et ai passé sur des choses qui me font défaut aujourd'hui



Que penses tu des réponses données par Mr Baillie ?
0
Rejoignez-nous