PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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
Leo_Robotic_Passion
Messages postés135Date d'inscriptiondimanche 19 novembre 2000StatutMembreDerniè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 !
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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
Leo_Robotic_Passion
Messages postés135Date d'inscriptiondimanche 19 novembre 2000StatutMembreDerniè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
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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
Leo_Robotic_Passion
Messages postés135Date d'inscriptiondimanche 19 novembre 2000StatutMembreDerniè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 !
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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
Leo_Robotic_Passion
Messages postés135Date d'inscriptiondimanche 19 novembre 2000StatutMembreDerniè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
Leo_Robotic_Passion
Messages postés135Date d'inscriptiondimanche 19 novembre 2000StatutMembreDerniè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.
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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
Leo_Robotic_Passion
Messages postés135Date d'inscriptiondimanche 19 novembre 2000StatutMembreDerniè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 :
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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
Leo_Robotic_Passion
Messages postés135Date d'inscriptiondimanche 19 novembre 2000StatutMembreDerniè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.
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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
Leo_Robotic_Passion
Messages postés135Date d'inscriptiondimanche 19 novembre 2000StatutMembreDerniè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 ?