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 :

Reception d'une tram TCP [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 Reception d'une tram TCP
    Bonjour,

    je cherche à récupérer une tram TCP.

    Je m'explique, j'ai un automate qui m'envoi une tram tcp que je reçois très bien (wareshark).

    Mais je n'arrive pas à afficher dans une liste les trams que je reçois de l'automate.

    J'ai essayé d'utiliser les fonction socket mais ça ne fonctionne pas!

    bout de code déjà testé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SI SocketCrée("server", 8000) = Faux ALORS
    	Erreur("Erreur de création " + ErreurInfo(errMessage))
    SINON
    	// Gestion des connexions des postes clients dans un thread
    	ThreadExécute("Thread1", threadNormal, ProcédureAttente)
    FIN
    LIB_infoc="Connexion ok"
    ProcedureAttente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    PROCEDURE ProcédureAttente()
    Trace("procedur attente")
    BOUCLE
    	SI SocketAttendConnexion("server") = Vrai ALORS
    		Canal est une chaîne
    		// Si la connexion est acceptée, 
    		// la gestion de cette connexion est réalisée dans un thread spécifique
    		Canal = SocketAccepte("server")
    		Trace("socket accepte")
    		ThreadExécute(Canal, threadNormal, ProcédureGestion, Canal)
    	FIN
    FIN
    proceduregestion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    PROCEDURE ProcédureGestion()
    ListeAjoute(LISTE_infotcp,"réponse automate ok")

  2. #2
    Membre du Club
    Homme Profil pro
    Admin Unix & Dev Sénior
    Inscrit en
    Mai 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : Admin Unix & Dev Sénior

    Informations forums :
    Inscription : Mai 2003
    Messages : 25
    Points : 49
    Points
    49

  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
    Oui justement, j'ai écrit ce bout de code en utilisant les fonctions socket de pcsoft.

    Pour le tuto sur les sockets, j'ai bien essayé de m'en servir, mais j'ai une erreur en essayant de me connecter à l'automate. Une erreur qui dit impossible de lié le socket a l'adresse ip ????

    Je ne voix pas pourquoi vue que je réussi à me connecter à l'automate, lui demander de mettre une sortie à "on" ou bien de demander l'état d'une entrée.

    Vous allez me dire, et bien où est-ce que ça coince? Alors oui j'arrive à communiquer avec l'automate, mais je n'arrive pas à rester à l'écoute, je pensais qu'en laissant un socket ouvert, si l'automate doit envoyer quelque chose, je dois le retrouver sur mon application windev, chose que je n'arrive pas à faire. Alors la doc sur les sockets, j'ai essayé mais prob de connexion.

  4. #4
    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
    En fait j'ai remarqué que je ne peux pas utiliser la fonction socketCréé(), en effet, mon automate gère déjà le modbus tcp/ip donc j'ai juste à faire un socketConnecte() pour arriver à me connecter. Le problème c'est que derrière, la fonction SocketAttendConnexion() ne peux pas fonctionner sans socketCréé().
    De plus l'utilisation des threads avec le tuto ne fonctionne pas chez moi, toujours des problèmes du genre le tread "x" existe déjà etc....


    je suis un peux perdu.

    Donc pour résumer, je me connecte à l'automate en utilisant socketConnecte("server", 502, Adresse IP)
    ensuite, je souhaites rester à l'écoute et afficher dans une liste, une tram que je reçois.

  5. #5
    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 mal analysé le tuto et la doc sur le socketCrée, le problème venait du fait que j'entrais l'adresse ip de l'automate au lieu de la mienne.

    En revanche, j'ai due supprimer la boucle dans la procédure d'attente qui me renvoyait une erreur.

    J'ai un autre problème maintenant,

    je n'arrive pas à afficher la tram reçu.
    voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    PROCEDURE affichemes(nomSocket)
    bufTexte est un Buffer
    BOUCLE
    	Trace("socketlit")
    	bufTexte=SocketLit(nomSocket,Vrai)
    	//ListeAjoute("LISTE_infotcp",texte)
    	Trace(BufferVersHexa(bufTexte))
     
    FIN
    ThreadArrête("",500)
    Multitâche(-30)

  6. #6
    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
    Pour ceux que ça intéresse, je donne mon code fonctionnel :
    Création socket:
    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,"IPServer") = 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 //dans mon cas, le message n'a pas de marqueur de fin
    		ThreadExécute("Thread1", threadNormal, attente)
    		LIB_infoc="Connexion ok"
    	FIN
    	// Gestion des connexions des postes clients dans un thread
     
    FIN
    procedure 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 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
    19
    20
    21
    22
    23
    24
    PROCEDURE affichemes()
    Trace(SocketClientInfo("server",SocketAdresse))
    Trace(SocketClientInfo("server",SocketPort))
    Trace("affiche message")
     
    TANTQUE SocketExiste("server") = Vrai
    	Trace("socket existe ")
    	Msg est une chaîne = SocketLit("server", Vrai)
    	Trace("socket lit ok")
    	SI Msg <> "" ALORS
    		//ListeAjoute(LISTE_Messages, Maintenant() + " " + sMsg)
    		MaChaineASCII est une chaîne
    		MaChaineHexa est une chaîne
    		POUR i = 1 _A_ Taille(Msg) PAS 2
    			MaChaineASCII += Caract(Val(MaChaineHexa[[i sur 2]],"x"))
    		FIN
    		Trace(MaChaineASCII)
     
    	FIN
    FIN	
    	//ListeAjoute("liste1",texte)
     
    ThreadArrête("",500)
    Multitâche(-30)
    Voilà sujet résolu !!!!

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/07/2006, 10h11
  2. MaskEdit pour saisir une adresse TCP/IP
    Par Ben_Le_Cool dans le forum Composants VCL
    Réponses: 3
    Dernier message: 31/01/2006, 23h04
  3. Problème avec l'envoi d'une trame TCP
    Par fredoBreton dans le forum API, COM et SDKs
    Réponses: 14
    Dernier message: 17/11/2005, 20h19
  4. Petit souci sur la libération d'une connexion tcp
    Par alexandre75 dans le forum Développement
    Réponses: 1
    Dernier message: 08/11/2005, 19h43
  5. [Réseau] Envoyer une trame tcp
    Par heid dans le forum Web & réseau
    Réponses: 5
    Dernier message: 18/07/2005, 13h07

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