Alaix | Alors voila j'ai trouvé un petit code et je l'ai reaménagé pour moi meme sauf que biensur ca marche pas. Le but est d'une machine 1 envoyé une chaine de caractère sur une machine 2.
Voivi les codes utilisés :
Pour l'emission sur la machine 1 :
Code :
- // FICHIERS D'INCLUSION
- //------------------------------------------------------------------------------
- #include <windows.h>
- #include <winbase.h>
- #include <stdio.h>
- #include <conio.h>
- #include <string.h>
- // CONSTANTES
- //-------------------------------------------------------------------------------
- // Définition du code d'erreurs
- typedef enum
- {
- e_ErrCom_None, // Pas d'erreur
- e_ErrCom_Creation, // Erreur lors de la création du flux
- e_ErrCom_Utilise, // Le port com est déjà utilisé
- e_ErrCom_Inexistant, // Le port com n'existe pas
- e_ErrCom_Timeout, // Timeout lors d'une émission-réception
- e_ErrCom_Emission, // Erreur lors de l'émission
- e_ErrCom_Reception, // Erreur lors de la réception
- e_ErrCom_Definition_Trame, // Erreur de définition de la trame
- e_ErrCom_Nack, // Demande non prise en coompte
- e_ErrCom_Checksum // Erreur de checksum
- } e_ErrCom;
- // Nom du port série
- #define PORT1 "COM1"
- #define PORT2 "COM2"
- // Définition des vitesses de communication
- #define V2400 2400
- #define V4800 4800
- #define V1200 1200
- #define V9600 9600
- // Définition du nombre de bits
- #define BITS_7 7
- #define BITS_8 8
- // Définition du nombre de bits de stop
- #define BIT_DE_STOP_1 1
- #define BIT_DE_STOP_2 2
- // Définition de la parité
- #define PAS_DE_PARITE 'N'
- #define PARITE_IMPAIRE 'O'
- #define PARITE_PAIRE 'E'
- // Codes de retour génériques
- #define OK 1
- #define KO 0
- // Longueur max réservée pour une trame
- #define LG_TRAME 100
- // PROTOTYPES
- //----------------------------------------------------------------------------
- e_ErrCom OuvreCom(char *strPort,long BaudRate,int BitsSize,int Parity,int StopBits);
- e_ErrCom EmissionCom(void *trameRecue, unsigned int nCount);
- void FermeCom();
- // VARIABLES GLOBALES
- //-----------------------------------------------------------------------------
- DCB g_DCB; // structure dcb du port
- e_ErrCom g_ErrCom= e_ErrCom_None; // Variable des erreurs de com
- HANDLE g_hCom = 0; // handle de la com
- char *trameRecue="salut\0";
- unsigned int NbMxCar = 100;
- unsigned int NbCarRecus;
- HWND hyper_term;
- void main (void)
- {
-
- printf("Envoi du message\n" );
- //Exemple de configuration du port serie :
- g_ErrCom=OuvreCom(PORT1,V9600,BITS_8,PARITE_PAIRE,BIT_DE_STOP_1);
- //Exemple d'emission
- g_ErrCom=EmissionCom(trameRecue,7);
- printf("%s",trameRecue);
- printf("Fin d'envoi du message\n" );
- // FermeCom();
- }
- //------------------------------------------------------------------------------
- // FONCTION : OuvreCom
- //------------------------------------------------------------------------------
- // DESCRIPTION :
- // Initialise et ouvre un port série
- //
- //------------------------------------------------------------------------------
- // PARAMETRES :
- // - strPort Nom du port "COM1","COM2"
- // - BaudRate Vitesse
- // - BitsSize Taille de l'info
- // - Parity Parité
- // - StopBits Nombre de bits de stop
- //
- // RETOUR :Code d'erreur
- //------------------------------------------------------------------------------
- e_ErrCom OuvreCom(char *strPort,long BaudRate,int BitsSize,int Parity,int StopBits)
- {
- g_ErrCom = e_ErrCom_None;
- // On ouvre le port série
- g_hCom = CreateFile(strPort,GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,CREATE_NEW,FILE_FLAG_WRITE_THROUGH | FILE_FLAG_NO_BUFFERING ,NULL);
- if(g_hCom == INVALID_HANDLE_VALUE)
- {
- // Echec
- g_ErrCom=e_ErrCom_Creation;
- }
- else
- {
- // On vide les buffers
- PurgeComm(g_hCom,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
- // On paramètre le port série
- g_DCB.DCBlength = sizeof(DCB);
- //Configuration actuelle
- GetCommState(g_hCom, &g_DCB);
- //Modification du DCB
- g_DCB.BaudRate=BaudRate;
- g_DCB.ByteSize=BitsSize;
- g_DCB.Parity=Parity;
- g_DCB.StopBits=StopBits;
- g_DCB.fDtrControl=DTR_CONTROL_DISABLE;
- //Configuration de la liaison serie
- SetCommState(g_hCom,&g_DCB);
- }
- return g_ErrCom;
- }
- //----------------------------------------------------------------------------
- // FONCTION : EmissionCom
- //----------------------------------------------------------------------------
- // DESCRIPTION :
- // Emission d'octets sur la liaison série
- //
- //----------------------------------------------------------------------------
- // PARAMETRES :
- // -lpBuf Pointeur sur les octets a emettre
- // -nCount Nombre d'octet a emettre
- //
- //----------------------------------------------------------------------------
- // RETOUR :Code d'erreur
- //----------------------------------------------------------------------------
- e_ErrCom EmissionCom(void * trameRecue,unsigned int nCount)
- {
- DWORD NumBytes=0;
- if(g_hCom!=NULL)
- {
- // On pari sur pas d'erreur
- g_ErrCom=e_ErrCom_None;
- //Emission du buffer
- if(WriteFile(g_hCom,trameRecue,nCount,&NumBytes,NULL)==0)
- {
- g_ErrCom=e_ErrCom_Emission;
- }
- }
- else
- //Le port n'a pas été ouvert
- g_ErrCom=e_ErrCom_Creation;
- printf("%s\n",trameRecue);
- return g_ErrCom;
- }
- //-----------------------------------------------------------------------
- // FONCTION : FermeCom
- //-----------------------------------------------------------------------
- // DESCRIPTION :
- // Ferme le port série préalablement ouvert avec OuvreCom
- //
- //-----------------------------------------------------------------------
- // PARAMETRES :
- // Néant
- //-----------------------------------------------------------------------
- // RETOUR :Néant
- //-----------------------------------------------------------------------
- void FermeCom()
- {
- if(g_hCom!=NULL)
- {
- CloseHandle(g_hCom);
- }
- }
|
Pour la reception sur la machine 2 :
Code :
- // FICHIERS D'INCLUSION
- //------------------------------------------------------------------------------
- #include <windows.h>
- #include <winbase.h>
- #include <stdio.h>
- #include <conio.h>
- #include <string.h>
- // CONSTANTES
- //-------------------------------------------------------------------------------
- // Définition du code d'erreurs
- typedef enum
- {
- e_ErrCom_None, // Pas d'erreur
- e_ErrCom_Creation, // Erreur lors de la création du flux
- e_ErrCom_Utilise, // Le port com est déjà utilisé
- e_ErrCom_Inexistant, // Le port com n'existe pas
- e_ErrCom_Timeout, // Timeout lors d'une émission-réception
- e_ErrCom_Emission, // Erreur lors de l'émission
- e_ErrCom_Reception, // Erreur lors de la réception
- e_ErrCom_Definition_Trame, // Erreur de définition de la trame
- e_ErrCom_Nack, // Demande non prise en coompte
- e_ErrCom_Checksum // Erreur de checksum
- } e_ErrCom;
- // Nom du port série
- #define PORT1 "COM1"
- #define PORT2 "COM2"
- // Définition des vitesses de communication
- #define V1200 1200
- #define V2400 2400
- #define V4800 4800
- #define V9600 9600
- // Définition du nombre de bits
- #define BITS_7 7
- #define BITS_8 8
- // Définition du nombre de bits de stop
- #define BIT_DE_STOP_1 1
- #define BIT_DE_STOP_2 2
- // Définition de la parité
- #define PAS_DE_PARITE 'N'
- #define PARITE_IMPAIRE 'O'
- #define PARITE_PAIRE 'E'
- // Codes de retour génériques
- #define OK 1
- #define KO 0
- // Longueur max réservée pour une trame
- #define LG_TRAME 100
- // PROTOTYPES
- //----------------------------------------------------------------------------
- e_ErrCom OuvreCom(char *strPort,long BaudRate,int BitsSize,int Parity,int StopBits);
- e_ErrCom ReceptionCom(void *lpBuf, unsigned int nCountMax, unsigned int *pCountRead);
- void FermeCom();
- // VARIABLES GLOBALES
- //-----------------------------------------------------------------------------
- DCB g_DCB; // structure dcb du port
- e_ErrCom g_ErrCom= e_ErrCom_None; // Variable des erreurs de com
- HANDLE g_hCom = 0;
- HWND hyper_term; // handle de la com
- char *trameRecue [10];
- //Nombre de caracteres maxi a lire
- unsigned int NbMaxCar=100;
- //pointeur sur le nombre de caractère recu
- unsigned int NbCarRecus;
- void main (void)
- {
- //Exemple de configuration du port serie :
- g_ErrCom=OuvreCom(PORT1,V9600,BITS_8,PARITE_PAIRE,BIT_DE_STOP_1);
- //Exemple de reception
- printf("Attention Reception...\n" );
- g_ErrCom=ReceptionCom(trameRecue,NbMaxCar,&NbCarRecus);
- printf("%s\n",trameRecue);
- printf("Fin Reception\n" );
- //Fermeture du port de communication
- }
- //------------------------------------------------------------------------------
- // FONCTION : OuvreCom
- //------------------------------------------------------------------------------
- // DESCRIPTION :
- // Initialise et ouvre un port série
- //
- //------------------------------------------------------------------------------
- // PARAMETRES :
- // - strPort Nom du port "COM1", "COM2"
- // - BaudRate Vitesse
- // - BitsSize Taille de l'info
- // - Parity Parité
- // - StopBits Nombre de bits de stop
- //
- // RETOUR :Code d'erreur
- //------------------------------------------------------------------------------
- e_ErrCom OuvreCom(char *strPort,long BaudRate,int BitsSize,int Parity,int StopBits)
- {
- g_ErrCom = e_ErrCom_None;
- // On ouvre le port série
- g_hCom = CreateFile(strPort,GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_FLAG_WRITE_THROUGH | FILE_FLAG_NO_BUFFERING,NULL);
- if(g_hCom == INVALID_HANDLE_VALUE)
- {
- // Echec
- g_ErrCom=e_ErrCom_Creation;
- }
- else
- {
- // On vide les buffers
- PurgeComm(g_hCom,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
- // On paramètre le port série
- g_DCB.DCBlength = sizeof(DCB);
- //Configuration actuelle
- GetCommState(g_hCom, &g_DCB);
- //Modification du DCB
- g_DCB.BaudRate=BaudRate;
- g_DCB.ByteSize=BitsSize;
- g_DCB.Parity=Parity;
- g_DCB.StopBits=StopBits;
- g_DCB.fDtrControl=DTR_CONTROL_DISABLE;
- //Configuration de la liaison serie
- SetCommState(g_hCom,&g_DCB);
- }
- return g_ErrCom;
- }
- //---------------------------------------------------------------------------
- // FONCTION : ReceptionCom
- //---------------------------------------------------------------------------
- // DESCRIPTION :
- // Reception de caractères sur la liaison série
- //
- //---------------------------------------------------------------------------
- // PARAMETRES :
- // -lpBuf Pointeur sur le buffer de caractère a lire
- // -nCountMax Nombre maxi de caractère a lire
- // -pCountRead Pointeur sur le nombre de caractères lus
- //---------------------------------------------------------------------------
- // RETOUR :Code d'erreur
- //---------------------------------------------------------------------------
- e_ErrCom ReceptionCom(void *trameRecue,unsigned int nCountMax, unsigned int* pCountRead)
- {
- COMSTAT Stat;
- DWORD Errors;
- unsigned int nCarALire;
- unsigned long NCarLus=0;
- if(g_hCom!=NULL)
- {
- //on pari sur pas d'erreur
- g_ErrCom=e_ErrCom_None;
- //Pour éviter de gérer un time out
- Sleep(5000);
- //Pour connaitre le nombre d'octets dans le buffer d'entrée
- ClearCommError(g_hCom,&Errors,&Stat);
- nCarALire=Stat.cbInQue;
- //On effectue la lecture si il y a des caractères présents
- if( (nCarALire>0)&&(nCarALire<=nCountMax) )
- {
- if(ReadFile(g_hCom,trameRecue,nCarALire,&NCarLus,NULL)==0)
- {
- g_ErrCom=e_ErrCom_Reception;
- }
- }
- *pCountRead=NCarLus;
- }
- else
- //Le port n a pas été ouvert
- g_ErrCom=e_ErrCom_Creation;
- //Compte rendu de l'exécution
- return g_ErrCom;
- }
- //-----------------------------------------------------------------------
- // FONCTION : FermeCom
- //-----------------------------------------------------------------------
- // DESCRIPTION :
- // Ferme le port série préalablement ouvert avec OuvreCom
- //
- //-----------------------------------------------------------------------
- // PARAMETRES :
- // Néant
- //-----------------------------------------------------------------------
- // RETOUR :Néant
- //-----------------------------------------------------------------------
- void FermeCom()
- {
- if(g_hCom!=NULL)
- {
- CloseHandle(g_hCom);
- }
- }
|
Alors ca ca marche un peu près du style on envoie la chaine salut et sur l'autre pc ca écit sW8t (comprend pas, sans doute une erreur)
Mais la ou cela devient interressant c'est que je me suis dis que j'allais regardé les réglages d'hyperterminal je cree une connection je mregarde et je ferme tout. Et la miracle ca marche je me dis impeccable mais en fait non car mes codes ne fonctionne que lorsque je lance hyperterminal avent. Je suis meme alle jusqu'a regarde les trames a l'analyseur de protocoles !!
Donc la si qq veut bien me donner le code qui marche cela eviterai que je devienne fou
Merci a tous. |