IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Problème socketlit() plante [WD18]


Sujet :

WinDev

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Janvier 2014
    Messages : 180
    Points : 58
    Points
    58
    Par défaut Problème socketlit() plante
    Bonjour,

    je dis réaliser une communication entre un soft et un automate. J'ai réaliser une fenêtre avec windev, ce code fonctionne, je récupère bien les messages envoyé par l'automate.
    Cependant, je dois créer une fenêtre qui interragi avec l'automate suivant les messages réceptonné, donc je fais une fenêtre et je fais un copier collé du code utilisé juste avant pour lire les messages avec le socketlit(), cepandant le socketlit() sur cette dernière reste vide même quand les messages sont envoyé.
    Les différences entre les fenêtres :
    sur la 1ere, je crée le socket sur un bouton, et je trace les messages reçu.
    sur la deuxième, je crée le socket sur la fenêtre à l'ouverture du programme, je trace également les messages reçu.

    Voici les codes:
    (1ere fenêtre entièrement fonctionnel)
    Clic sur BTN_Connexion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SI SocketCrée("server", 44818,"10.29.1.60") = Faux ALORS
    	Erreur("Erreur de création " + ErreurInfo(errMessage))
    	LIB_infoc="Problème lors du démarrage du serveur"
    SINON
    	Socket.Option = SocketNagleOff
    	SI SocketChangeModeTransmission("server",SocketSansMarqueurFin)= Vrai ALORS
    		ThreadExécute("Thread1", threadNormal, attente)
    		LIB_infoc="Connexion ok"
    	FIN
    	// Gestion des connexions des postes clients dans un thread
     
    FIN
    Procedure local attente()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    PROCEDURE attente()
    SI SocketAttendConnexion("server") ALORS // si une demande de connexion est en attente
    	//canal est une chaîne
    	//canal=SocketAccepte("server") //Cette fonction permet de créer le canal de communication entre la socket serveur et la socket cliente. 
    	//trace(canal)
    	ThreadExécute("server",threadNormal,affichemes) //Lance l'exécution d'un "thread" 
    	Multitâche(-30) //La fonction Multitache avec un negatif suspend l'application
    FIN
    procedure local affichemes()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    PROCEDURE affichemes()
     
    TANTQUE SocketExiste("server") = Vrai
    	Msg est une chaîne = SocketLit("server", Vrai)
    	SI Msg <> "" ALORS
    		//ListeAjoute(LISTE_Messages, Maintenant() + " " + sMsg)
    		//Pour i = 1 _a_ Taille(msg) PAS 2
    		//	MaChaineASCII += caract(val(MaChaineHexa[[i sur 2]],"x"))
    		//FIN
    		Trace(Msg)
     
    	FIN
     
    FIN	
    	//ListeAjoute("liste1",texte)
     
    ThreadArrête("",500)
    Multitâche(-30)
    Voici les codes pour ma deuxième fenêtre là où le problème se trouve:
    Fin d'initialisation de Fen_test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SI SocketCrée("server", 44818,"10.29.1.60") = Faux ALORS
    	Erreur("Erreur de création " + ErreurInfo(errMessage))
    	LIB_SansNom1="Problème lors du démarrage du serveur"
    SINON
    	Socket.Option = SocketNagleOff
    	SI SocketChangeModeTransmission("server",SocketSansMarqueurFin)= Vrai ALORS
    		Trace("j'attend")
    		ThreadExécute("Thread1", threadNormal, attente)
    		LIB_SansNom1="Connexion serveur créée....."
    	FIN
    	// Gestion des connexions des postes clients dans un thread
     
    FIN
    procedure local attente():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    PROCEDURE attente()
    SI SocketAttendConnexion("server") ALORS // si une demande de connexion est en attente
    	//canal est une chaîne
    	//canal=SocketAccepte("server") //Cette fonction permet de créer le canal de communication entre la socket serveur et la socket cliente. 
    	//trace(canal)
    	Trace("attend connexion")
    	ThreadExécute("server",threadNormal,affichemes) //Lance l'exécution d'un "thread" 
    	Multitâche(-30) //La fonction Multitache avec un negatif suspend l'application
    FIN
    procedure local affichem
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    PROCEDURE affichemes()
    Trace("affichemess")
    TANTQUE SocketExiste("server") = Vrai
    	Trace("socket existe")
    	Msg est une chaîne
    	Msg = SocketLit("server", Vrai)
    	Trace("test")
     
    	SI Msg <> "" ALORS
    		Trace("message")
    		//ListeAjoute(LISTE_Messages, Maintenant() + " " + sMsg)
    		//Pour i = 1 _a_ Taille(msg) PAS 2
    		//	MaChaineASCII += caract(val(MaChaineHexa[[i sur 2]],"x"))
    		//FIN
    		//affichage appel malade niveau 1
    		Trace(Msg)
     
    //		SI Gauche(Msg,2)= "CH" ALORS
    //			{"TRM_Voyant_"+msg}..Couleur = RougeClair
    //			ListeAjoute(LISTE_alarme,HeureSys+": Appel chambre "+Msg)
    //		FIN
    //		//affichage appel malade niveau 2
    //		SI Gauche(Msg,3)= "+CH" ALORS
    //			{"TRM_Voyant_"+Msg}..Couleur = RougeFoncé
    //			{"LIB_Urgence_"+Msg} = "Urgence!" 
    //			ListeAjoute(LISTE_alarme,HeureSys+": Appel urgent chambre "+Msg)
    //		FIN
    //		//Acquittement appel malade
    //		Si Gauche(Msg,3)="ACQ" ALORS
    //			{"TRM_Voyant_"+Msg}..Couleur = VertClair
    //			{"LIB_Urgence_"+Msg} = "" 
    //			ListeAjoute(LISTE_alarme,HeureSys+": L'appel de la chambre "+Msg+" vient d'être acquité")
    //		FIN
    //		//Repport d'alarme
    //		SI Gauche(Msg,3)="AL:" ALORS
    //			ListeAjoute(LISTE_alarme,HeureSys+" : "+Msg)
    //		FIN
    //		//Repport d'alarme
    //		SI Gauche(Msg,3)="AP:" ALORS
    //			ListeAjoute(LISTE_alarme,HeureSys+" :  Une personne viens de sonner sur la porte côté Nord. Veuillez regarder la vidéo et appuyer sur le bouton d'ouverture de la porte si la personne est autorisé.")
    //			AMC>>Play
    //			BTN_ouverture_porte..Visible=vrai
    //		FIN
     
    	FIN
     
    FIN	
    //ListeAjoute("liste1",texte)
     
    ThreadArrête("",500)
    Multitâche(-30)
    Vous remarquerez qu'il y a beaucoup de ligne commenté, en fait j'ai essayé plusieurs chose avant de venir sur le forum !!!

  2. #2
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Est-ce que tu fermes bien ton socket lorsque cela est nécessaire. J'ai vu que tu utilisais un thread. Est-ce que celui-ci n'empiéterait pas sur le 2° socket ?
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Janvier 2014
    Messages : 180
    Points : 58
    Points
    58
    Par défaut
    bon en fait j'ai résolu le problème !

    Le problème vient du fait que dans ma deuxième fenêtre, j'utilise des procédures local et dans ma première fenêtre, j'utilise des procédures globale.

    Alors je pensais que ça ne pouvais pas causer de problème si quelqu'un sais le pourquoi du comment, je suis preneur.
    Donc pour résoudre mon problème, ma variable Msg est en variable globale. Mes procédure attente et affichemes sont en procédure globale.
    Dans ma procédure affichemes(), je remplis uniquement ma variable globale Msg que j'utilise dans différentes fenêtre pour traiter les messages reçus de l'automate.

    Si quelqu'un a un projet de communication entre automate shneider m241 et soft, je serais ravis de vous aider !!!

  4. #4
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Effectivement, le fait d'utiliser des procédures locales et globales peut engendrer ce genre de pb.

    Je te conseille de faire une collection de procédures globales que tu pourras "trimbaler" vers un autre projet.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Problème userform plante excel
    Par Florian.gr dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 30/08/2015, 21h55
  2. [XL-2003] ROWS.INSERT probléme macro plante
    Par pierre246 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/06/2015, 15h08
  3. [Problème] Requête ping qui plante !
    Par magicbisous-nours dans le forum VB.NET
    Réponses: 1
    Dernier message: 14/12/2007, 17h04
  4. Réponses: 8
    Dernier message: 20/06/2006, 16h25
  5. [Novice] Problème avec Eclipse 3.0.x qui plante
    Par esolarc dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 27/05/2005, 13h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo