CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C++]protocole de communication

Alcolado
Alcolado
Niveau 9
07 février 2012 à 13:29:54

Bonjour,
Je dois établir un protocole de communication.
Je dispose d'un badge RFID qui possede un ID que je dois transmettre à un poste de supervision. Mais pour cela le badge RFID doit passer un portillon.
La communication s’opère en trois phases.
-Tout d’abord la phase de connexion.
-Puis, la phase d’identification dans laquelle notre client envoie les caractères HW suivie du caractère correspondant au mode d’initialisation du portique. En cas de bonne identification le serveur renvoie les caractères HX suivie d’un numéro qu’il attribue lui-même à chaque lecteur RFID définitivement; ce numéro étant attribuer lors de la première demande d’identification d’un lecteur.
-Enfin, la phase d’envoi de l’identifiant du badge dans laquelle notre client envoie les caractères NT suivie de l’identifiant du lecteur RFID qui lui envoie cette trame puis de l’identifiant du badge. Cette phase d’envoi de trame s’effectue à chaque fois que l’on a à vérifier un badge jusqu’à une éventuelle déconnexion du client.

J'ai commencé a coder cela en Java( langage que je maitrise mieux que le c++ pour m'aider). Mais ma partie doit ce faire en C++ hors c'est un langage que j'ai enormement de mal a cerner....J'ai deja crée la parti Serveur pour mon collegue en Java.
Voila une partie de mon code en Java coté client:
Classe Client_TCP

package projet;

import java.net.*;
import java.io.*;

public class Client_TCP extends Thread{

private Socket sock;
private char IDnetronix;
private String donnee="";
private String IDtag;
private char mode;

public void Connexion(){
try {
sock = new Socket("192.168.12.174",1337);
} catch (UnknownHostException e1) {
e1.printStackTrace();
} catch (IOException e1) {
//e1.printStackTrace();
}
while(sock==null){
try {
sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(" tentative de connexion");
try {
sock = new Socket("192.168.12.174",1337);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
//e.printStackTrace();
}
}

System.out.println(" --------------------------
-------------------");
System.out.println(" Connexion réussie");

System.out.println(" --------------------------
-------------------");
}

public void Identification(){

System.out.println(" --------------------------
-------------------");
System.out.println(" Identification ");

System.out.println(" --------------------------
-------------------");

PrintWriter ecrireSock;
BufferedReader lireSock;
//System.out.println(" mode??? :"+getMode());

try {
ecrireSock = new PrintWriter(sock.getOutputStream());

lireSock = new BufferedReader(new InputStreamReader(sock.getInputStream()));

if(getMode()=='e' || getMode()=='E'){

System.out.println(" ------------------------
---------------------");
System.out.println(" Portique d'entrée ");

System.out.println(" ------------------------
---------------------");
ecrireSock.println("HW E");
if(ecrireSock.checkError()) System.out.println(" Erreur envoie");
System.out.println(" HW E envoyé");
ecrireSock.flush();

}
else if(getMode()=='s' ||getMode()=='S'){

System.out.println(" ------------------------
---------------------");
System.out.println(" Portique de sortie ");

System.out.println(" ------------------------
---------------------");
ecrireSock.println("HW S");
if(ecrireSock.checkError()) System.out.println(" Erreur envoie");
System.out.println(" HW S envoyé");
ecrireSock.flush();

}
else if(getMode() =='i' || getMode()=='I'){

System.out.println(" ------------------------
---------------------");
System.out.println(" Portique d'identification ");

System.out.println(" ------------------------
---------------------");
ecrireSock.println("HW I");
if(ecrireSock.checkError()) System.out.println(" Erreur envoie");
System.out.println(" HW I envoyé");
ecrireSock.flush();

}
else{
System.out.println(" \n Vous n'avez pas choisis un mode de fonctionnement correct \n");
System.exit(0);
}

donnee=lireSock.readLine();
System.out.println(" "+donnee);
if(donnee.charAt(0)=='H'){
IDnetronix=donnee.charAt(3);
System.out.println(" "+donnee.charAt(3));
}
System.out.println(" Reception : ");
System.out.println(" "+donnee);
System.out.println("\n\n");

} catch (IOException e) {
e.printStackTrace();
}

System.out.println(" -------------------------
--------------------");
System.out.println(" Fin identification ");

System.out.println(" -------------------------
--------------------");
}

public void EnvoiTrame(){

PrintWriter ecrireSock;
BufferedReader lireSock;
Led led = new Led();

try {
ecrireSock = new PrintWriter(sock.getOutputStream());
lireSock = new BufferedReader(new InputStreamReader(sock.getInputStream()));

if(getMode()=='e' || getMode()=='E'){
ecrireSock.print("NT "+IDnetronix+" "+IDtag.toUpperCase());
ecrireSock.checkError();
System.out.println(" NT, IDnetronix, ID tag envoyés");
donnee=lireSock.readLine();
System.out.println(" Reception : ");
System.out.println(" "+donnee);

//Traitement reponse
if(donnee.charAt(0)=='A' && donnee.charAt(1)=='A'){
System.out.println(" Allumage led verte");
led.directionLedVerte();
led.valueLedVerte();
}

else if(donnee.charAt(0)=='A' && donnee.charAt(1)=='D'){
System.out.println(" Allumage led rouge");
led.directionLedRouge();
led.valueLedRouge();
}
else{
System.out.println(" Le portique est actuellement désactivé !");
}
}
else if(getMode()=='s' ||getMode()=='S'){
ecrireSock.print("NT "+IDnetronix+" "+IDtag.toUpperCase());
ecrireSock.checkError();
System.out.println(" NT, IDnetronix, ID tag envoyés");
donnee=lireSock.readLine();
System.out.println(" Reception : ");
System.out.println(" "+donnee);

//Traitement reponse
if(donnee.charAt(0)=='A' && donnee.charAt(1)=='A'){
System.out.println(" Allumage led verte");
led.directionLedVerte();
led.valueLedVerte();
}

else if(donnee.charAt(0)=='A' && donnee.charAt(1)=='D'){
System.out.println(" Allumage led rouge");
led.directionLedRouge();
led.valueLedRouge();
}
else{
System.out.println(" Le portique est actuellement désactivé !");
}

}
else if(getMode() =='i' || getMode()=='I'){
ecrireSock.print("NT "+IDnetronix+" "+IDtag.toUpperCase());
ecrireSock.checkError();
System.out.println(" NT, IDnetronix, ID tag envoyés");
donnee=lireSock.readLine();
System.out.println(" Reception : ");
System.out.println(" "+donnee);
System.out.println(" Identification terminée");
}

if(donnee == null){
Connexion();
Identification();
EnvoiTrame();
}

System.out.println(" ------------------------
---------------------");
System.out.println(" Fin Envoie Trame ");

System.out.println(" ------------------------
---------------------");

System.out.println("\n");

} catch (IOException e) {
e.printStackTrace();
}
}

public void CloseConnexion(){

try {

sock.close();

} catch (IOException e) {
e.printStackTrace();
}
}

public String getDonnee() {
return donnee;
}

public void setIDtag(String dtag) {
IDtag = dtag;
}

public void setMode(char mode) {
this.mode = mode;
}

public char getMode() {
return mode;
}

}

Alcolado
Alcolado
Niveau 9
07 février 2012 à 13:53:13

ah merci :)

http://pastebin.com/jmZ8tGnd

godrik
godrik
Niveau 30
07 février 2012 à 14:28:25

je n'ai pas compris quelle est la question. Est ce "comment faire du reseau en c++"? Tu peux le faire avec les api berkeley comme en C, mais perso je trouve ca fatiguant. Tu peux chopper une classe socket sur un site web au pif. Il y a aussi des fonctionnalite reseau dans boost.

Alcolado
Alcolado
Niveau 9
07 février 2012 à 14:36:15

non en gros j'ai du mal a convertir mon code qui est en JAva en C++.

Mais apres oui ça reste du reseau :)

_skip
_skip
Niveau 10
07 février 2012 à 15:53:33

Une application de ce genre a vraiment besoin d'être stateful? Tu ne pourrais pas bâtir ça sur le principe d'une requête http avec en POST les indications (no de badge, no de lecteur etc...) plutôt qu'implémenter ça sur du pur socket?

Alcolado
Alcolado
Niveau 9
07 février 2012 à 16:01:03

Je suis etudiant j'ai pris l'exemple d'un ancien Tp corrigé par mon prof :(

_skip
_skip
Niveau 10
07 février 2012 à 16:04:29

Donc ce n'est pas un cas réel?

Alcolado
Alcolado
Niveau 9
07 février 2012 à 16:09:52

cas réel ?

Si ça l'est, c'est un projet, j'ai tous le matos en cours, le Badge le lecteur RFID etc...

Alcolado
Alcolado
Niveau 9
07 février 2012 à 16:11:05

Tous fonctionne correctement avec ce code la, le probleme c'est qu'il est en Java et j'ai un peu de mal a le faire en C++

1 partie doit etre fait en Java et l'autre en C++ c'est tout.
(désolé pour le double poste :) )

godrik
godrik
Niveau 30
07 février 2012 à 16:17:43

et c'est quoi le probleme avec la partie c++?

Alcolado
Alcolado
Niveau 9
07 février 2012 à 16:38:21

mon prof ma dit que les socket n'etait pas declaré de la meme maniere en C++ que en Java ... :sarcastic:

Alcolado
Alcolado
Niveau 9
07 février 2012 à 16:49:14

Je suis vraiment tete en l'air des fois désolé pour le derangement :ok:

et merci :)

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment