THREAD DE SOCKET EN C++ - RTOS - dk51 -
Résolu/Fermé
siskozed
Messages postés
69
Date d'inscription
mercredi 16 janvier 2008
Statut
Membre
Dernière intervention
2 septembre 2009
-
23 avril 2008 à 14:53
216970 - 18 mars 2009 à 11:10
216970 - 18 mars 2009 à 11:10
A voir également:
- THREAD DE SOCKET EN C++ - RTOS - dk51 -
- Thread - Accueil - Guide réseaux sociaux
- Compte thread - Accueil - Réseaux sociaux
- Error 2002 (hy000): can't connect to local server through socket '/run/mysqld/mysqld.sock' (2) - Forum Linux / Unix
- ERROR 2002 (HY000): Can't connect to local .. - Forum Bases de données
- Rt-thread camera - Forum Logiciels
4 réponses
siskozed
Messages postés
69
Date d'inscription
mercredi 16 janvier 2008
Statut
Membre
Dernière intervention
2 septembre 2009
86
21 mai 2008 à 20:15
21 mai 2008 à 20:15
Alors voilà la solution :
// Meteo.h ( THREAD DE COMMUNICATION SOCKET)
// Meteo .cpp (la fonction RUN est la fonction lancée par le thread )
Création du thread et passage du pointeur sur doc
ne pas oublier de déclarer comme ceci dans meteo.h :
voili voilou, je t'envoie le projet complet (ou presque) sur ton adresse mail.
// Meteo.h ( THREAD DE COMMUNICATION SOCKET)
#if !defined(AFX_METEO_H__4BB4970B_F2ED_4E97_9C58_24835AA71B7C__INCLUDED_) #define AFX_METEO_H__4BB4970B_F2ED_4E97_9C58_24835AA71B7C__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // Meteo.h : header file // #include "PrimsolClimatDoc.h" #include "CommSocket.h" ///////////////////////////////////////////////////////////////////////////// // CMeteo thread class CMeteo : public CWinThread { DECLARE_DYNCREATE(CMeteo) protected: CMeteo(); // protected constructor used by dynamic creation // Attributes public: // Operations public: int Run(); void setDoc(CPrimsolClimatDoc * doc) { m_pDonnees = doc;} // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CMeteo) public: virtual BOOL InitInstance(); virtual int ExitInstance(); //}}AFX_VIRTUAL // Implementation protected: virtual ~CMeteo(); // Generated message map functions //{{AFX_MSG(CMeteo) // NOTE - the ClassWizard will add and remove member functions here. //}}AFX_MSG DECLARE_MESSAGE_MAP() private: int m_Port; CString m_IPSrv; CPrimsolClimatDoc * m_pDonnees; CCommSocket m_pCommSocket; }; ///////////////////////////////////////////////////////////////////////////// //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_METEO_H__4BB4970B_F2ED_4E97_9C58_24835AA71B7C__INCLUDED_)
// Meteo .cpp (la fonction RUN est la fonction lancée par le thread )
// Meteo.cpp : implementation file // #include "stdafx.h" #include "PrimsolClimat.h" #include "Meteo.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CMeteo IMPLEMENT_DYNCREATE(CMeteo, CWinThread) CMeteo::CMeteo() { } CMeteo::~CMeteo() { } BOOL CMeteo::InitInstance() { // TODO: perform and per-thread initialization here //M__sock = new CCommSocket(); //CCommSocket dérivé de CAsyncSocket return TRUE; } int CMeteo::ExitInstance() { // TODO: perform any per-thread cleanup here return CWinThread::ExitInstance(); } BEGIN_MESSAGE_MAP(CMeteo, CWinThread) //{{AFX_MSG_MAP(CMeteo) // NOTE - the ClassWizard will add and remove mapping macros here. //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CMeteo message handlers int CMeteo::Run() { m_IPSrv = "192.168.1.56"; m_Port = 4000; float vrafvent1=0; float vrafvent2=0; float vrafvent=0; int dvent=0; float temp1=0; float temp2=0; float temp=0; int signe=0; int hygr=0; int pluv=0; while(1) { int BufSize = 256; char *pBuf=new char[BufSize]; //m_pCommSocket->setDoc(m_pDonnees); // transfert de l'adresse du pointeur m_pDonnees à la classe CCommSocket // client,cree un socket par default m_pCommSocket.Create(); // ouvre la connexion sur le serveur m_pCommSocket.Connect(m_IPSrv,m_Port); // reçoit la trame du serveur m_pCommSocket.Receive(pBuf,BufSize); // ferme le socket connecte Sleep(1); m_pCommSocket.Close(); Sleep(1); vrafvent1 = pBuf[0]; vrafvent2 = pBuf[1]; vrafvent = vrafvent1 + vrafvent2/10; dvent = pBuf[2]; temp1 = pBuf[3]; temp2 = pBuf[4]; temp = temp1+temp2/10; hygr = pBuf[5]; pluv = pBuf[6]; Sleep(1); m_pDonnees->m_pVerrouMeteo.Lock(); m_pDonnees->acquisitionReelleMeteo[0]= temp; m_pDonnees->acquisitionReelleMeteo[1]= (float)hygr; m_pDonnees->acquisitionReelleMeteo[2]= (float)pluv; m_pDonnees->acquisitionReelleMeteo[3]= vrafvent; m_pDonnees->acquisitionReelleMeteo[4]= (float)dvent; m_pDonnees->m_pVerrouMeteo.Unlock(); delete[]pBuf; Sleep(5000); } return (0); }
Création du thread et passage du pointeur sur doc
m_pMeteo = (CMeteo*) AfxBeginThread(RUNTIME_CLASS(CMeteo),THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED); m_pMeteo->setDoc(m_pDoc); m_pMeteo->ResumeThread();
ne pas oublier de déclarer comme ceci dans meteo.h :
void setDoc(CPrimsolClimatDoc * doc) { m_pDonnees = doc;}
voili voilou, je t'envoie le projet complet (ou presque) sur ton adresse mail.
siskozed
Messages postés
69
Date d'inscription
mercredi 16 janvier 2008
Statut
Membre
Dernière intervention
2 septembre 2009
86
27 avril 2008 à 16:21
27 avril 2008 à 16:21
personne ne s'y connait en socket ?
s'il vous plait ?! HELP
s'il vous plait ?! HELP
siskozed
Messages postés
69
Date d'inscription
mercredi 16 janvier 2008
Statut
Membre
Dernière intervention
2 septembre 2009
86
28 avril 2008 à 10:06
28 avril 2008 à 10:06
J'ai commencé à faire ca :
Mais je ne sais toujours pas comment m'y prendre pour la création du thread sous rtos
Mais je ne sais toujours pas comment m'y prendre pour la création du thread sous rtos
// Include files #include <stdio.h> #include <stdlib.h> #include <string.h> #include "clib.h" #include <iostream> //_________________________________________________________________ Constructeur SocketClient::SocketClient() { int valeurDeRetour = 0; } //____________________ initialisation des parametres de la socketServeurDistante void SocketClient::initialiserParamSocketServeurDistant() { parametreSocketServeurDistant.sin_family = AF_INET ; parametreSocketServeurDistant.sin_port = 7 ; parametreSocketServeurDistant.sin_addr.s_addr = 192.168.1.56 ; } //_______________________ initialisation des parametres de la socketClientLocale void SocketClient::initialiserParamSocketClientLocale() { parametreSocketClientLocale.sin_family = AF_INET ; parametreSocketClientLocale.sin_port = 0; // pour laisser le système fournir un numéro de port à la socket //client locale parametreSocketClientLocale.sin_addr.s_addr = INADDR_ANY ; // pour laisser le système déterminer // l'adresse IP de la machine } //__________________________________________________ créer la socketClientLocale void SocketClient::creerSocketClientLocale() { descripteurSocketClientLocale = socket(AF_INET,SOCK_STREAM,0) ; if (descripteurSocketClientLocale < 0) { cout << "Erreur dans la creation de la socketClientLocale !"; } } //_____________________________ attacher les parametres de la socketClientLocale void SocketClient::attacherParamEtSocketClientLocale() { valeurDeRetour = bind (descripteurSocketClientLocale, (struct sockaddr *) ¶metreSocketClientLocale, sizeof (struct sockaddr_in) ) ; if (valeurDeRetour < 0) { cout << "Erreur dans l'attachement des parametres de la socketClientLocale !"; } } //_________________________________________________________________ se connecter void SocketClient::seConnecter() { valeurDeRetour = connect (descripteurSocketClientLocale, (struct sockaddr *) ¶metreSocketServeurDistant, sizeof (struct sockaddr_in) ) ; if (valeurDeRetour < 0) { cout << "Impossible d'établir une connexion entre les sockets !"; close (descripteurSocketClientLocale) ; } } //______________________________________________________________ envoyer requete void SocketClient::envoyerRequete() { valeurDeRetour = send (descripteurSocketClientLocale, Requete, sizeof (Requete), 0); if (valeurDeRetour < 0) { cout << "Impossible d'envoyer la requete !"; close (descripteurSocketClientLocale) ; } } //____________________________________________________________ recevoir la trame void SocketClient::recevoirTrame() { valeurDeRetour = recv (descripteurSocketClientLocale, TrameServeur, sizeof (TrameServeur), 0); if (valeurDeRetour < 0) } //__________________________________________________________ fermer la connexion void SocketClient::fermerConnexion() { close (descripteurSocketClientLocale) ; }
siskozed
Messages postés
69
Date d'inscription
mercredi 16 janvier 2008
Statut
Membre
Dernière intervention
2 septembre 2009
86
5 mai 2008 à 10:58
5 mai 2008 à 10:58
j'ai résolu le probleme, j'essayerai de mettre la solution dans les jours à venir mais je n'ai pas le temps pour l'instant, si vous etes interessés, envoyez moi un mail, je vous enverrai ca ;)
salut tou le monde
j'ai une certe DK51 avec sc13 lorsque je la connecte a mon pc portable tou se passe bien mais losque je la connecte a mon pc de la maison je recois aucunne reponse qlq'un peut m'aider
j'ai une certe DK51 avec sc13 lorsque je la connecte a mon pc portable tou se passe bien mais losque je la connecte a mon pc de la maison je recois aucunne reponse qlq'un peut m'aider
Bonjour,
Je pense pas que le problème est du à la carte donc il faut verifier les paramètre de votre PC de bureau. parmi les choses que tu dois verifier:
- tu utilise le bon port COM et que ton port n'est pas abimé, pou cela essaie de connecter ton pc de maison à un autre périférique
- vérifier les paramètres de connexions; debit, controle de parité...
Je pense pas que le problème est du à la carte donc il faut verifier les paramètre de votre PC de bureau. parmi les choses que tu dois verifier:
- tu utilise le bon port COM et que ton port n'est pas abimé, pou cela essaie de connecter ton pc de maison à un autre périférique
- vérifier les paramètres de connexions; debit, controle de parité...
11 févr. 2009 à 17:22
Je suis etudiant moi aussi et je suis sur un projet similaire en partie au tien,c'est vraiment tres sympas de ta part de publier le code du thread ça ma beaucoup aidé .
Mon projet consiste en 1éré partie à envoyer des données depuis des capteurs thermiques vers une plaque à base de MCS1210 ensuite ce µc envoie ces données par des sockets vers une @ip à travers le gprs enfin le stockage dans une base de données .
la seconde partie du projet consiste à faire le parametrage du msc1210 (exp:desactiver certain capteurs)
donc on va faire chemin inverse de la 1ere partie mais soit par sms soit par gprs.
Je te serai tres reconnaissant si tu m'envoie ton projet et contre partie si ça t'interesse je pourrais t'envoyer la partie 2 (parametrage) une fois terminé .
voici mon mail :ziedbh2003@yahoo.fr