Envoi/Réception du trame en java

Fermé
eclipsia - 27 févr. 2009 à 16:18
 eclipsia - 3 mars 2009 à 16:38
Bonsoir,
j'ai presque une je cherche sur le net,j'ai trouvé plusieurs mais je n'arrive pas à bien comprendre comment je peux envoyer ou recevoir une trame donnée,je vais vous écrire le code que j'utilise:


Exemple:



package packessai;
import java.io.*;
import java.util.*;
import javax.comm.*;

public class SimpleWrite {
static Enumeration portList;
static CommPortIdentifier portId;
static String messageString = charOf(10)+"000"+charOf(27)+"V4D"+charOf(13);
static SerialPort serialPort;
static OutputStream outputStream;
static InputStream inputStream;
private String defaultPort;
public static char charOf(int ascii)
{
char c = (char) ascii;
return c;
}

public String RecevoirUn()
{
String donnee;
boolean read = false;
byte[] readBuffer = new byte[1];
int nbbyte=0;
try
{
//On lit 1 caractère
nbbyte = inputStream.read(readBuffer,0,1);
read = true;
}
//Affichage de l'erreur
catch (IOException e)
{
System.out.println(defaultPort+": Impossible de recevoir sur le port");
}
if(read==true)
{
donnee = new String(readBuffer);
donnee = donnee.substring(0,1);
}
else
{
donnee = new String("\0");
donnee = donnee.substring(0,1);
}
return donnee;
}

public String Recevoir()
{
String message="";
String temp=RecevoirUn();

if(temp.getBytes()[0] == 0x23){
temp=RecevoirUn();
while(temp.getBytes()[0]!=0x40)
{
message += temp;
temp=RecevoirUn();
}
System.out.println("Pression ="+message);
//vue.setPression(message);
message="";
temp=RecevoirUn();
while(temp.getBytes()[0]!=0x40)
{
message += temp;
temp=RecevoirUn();
}
System.out.println("Humidité ="+message);
//vue.setHumidite(message);
message="";
temp=RecevoirUn();
while(temp.getBytes()[0]!=0x40)
{
message += temp;
temp=RecevoirUn();
}
System.out.println("Temperature Interieur ="+message);
//vue.setTempInterieur(message);
message="";
temp=RecevoirUn();
while(temp.getBytes()[0]!=0x23)
{
message += temp;
temp=RecevoirUn();
}
System.out.println("Temperature Interieur ="+message);
// vue.setTempExterieur(message);
}
else{
while(temp.getBytes()[0]!=0x23)
{
temp = RecevoirUn();
}
temp = RecevoirUn();
while(temp.getBytes()[0]!=0x40)
{
message += temp;
temp=RecevoirUn();
}
System.out.println("Pression ="+message);
//vue.setPression(message);
message="";
temp=RecevoirUn();
while(temp.getBytes()[0]!=0x40)
{
message += temp;
temp=RecevoirUn();
}
System.out.println("Humidité ="+message);
// vue.setHumidite(message);
message="";
temp=RecevoirUn();
while(temp.getBytes()[0]!=0x40)
{
message += temp;
temp=RecevoirUn();
}
System.out.println("Temperature Interieur ="+message);
//vue.setTempInterieur(message);
message="";
temp=RecevoirUn();
while(temp.getBytes()[0]!=0x23)
{
message += temp;
temp=RecevoirUn();
}
System.out.println("Temperature Interieur ="+message);
//vue.setTempExterieur(message);
}
return temp;
}
public SimpleWrite() {

boolean portFound = false;
String defaultPort = "COM5";
portList = CommPortIdentifier.getPortIdentifiers();


while (portList.hasMoreElements()) {
portId = (CommPortIdentifier) portList.nextElement();

if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {

if (portId.getName().equals(defaultPort)) {
System.out.println("Found port " + defaultPort);

portFound = true;

try {
serialPort =
(SerialPort) portId.open("SimpleWrite", 2000);
} catch (PortInUseException e) {
System.out.println("Port in use.");

continue;
}

try {
outputStream = serialPort.getOutputStream();
} catch (IOException e) {}

try {
serialPort.setSerialPortParams(9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
} catch (UnsupportedCommOperationException e) {}


try {
serialPort.notifyOnOutputEmpty(true);
} catch (Exception e) {
System.out.println("Error setting event notification");
System.out.println(e.toString());
System.exit(-1);
}
}
}
//serialPort.close();
}

if (!portFound) {
System.out.println("port " + defaultPort + " not found.");
}
}
public void envoyerMessage(String messageHpgl) {

System.out.println("Writing \""+messageHpgl+"\" to "+serialPort.getName()+"...");

try {
outputStream.write(messageHpgl.getBytes());
outputStream.flush();
System.out.println("message envoyé");
}
catch (IOException e) {}

try {
Thread.sleep(1000);
//System.out.println("attente..."); // être sûr d'avoir transféré avant d'envoyer autre chose
}
catch (Exception e) {}
serialPort.close(); // fermeture du port ??
}

public static void main(String[] args)
{
SimpleWrite CS=new SimpleWrite();
String trame="trame à envoyer";
CS.envoyerMessage(trame);
String MessageReçu=CS.Recevoir();
System.out.println("Le message reçu est:"+MessageReçu);
}
}




et voilà ce que je reçu comme résultat:
Found port COM5
Writing "
000V4D
" to COM5...
message envoyé
Exception in thread "main" java.lang.NullPointerException
at packessai.SimpleWrite.RecevoirUn(SimpleWrite.java:68)
at packessai.SimpleWrite.Recevoir(SimpleWrite.java:92)
at packessai.SimpleWrite.main(SimpleWrite.java:307)


quelqu'un peut me dire comment je peut afficher la réponse reçu depuis le terminal auquel j'envoie ma trame.
S'il vous plaît quelqu'un m'aider c'est urgent.



Merci d'avance.
A voir également:

6 réponses

Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 209
27 févr. 2009 à 17:08
Vous avez trouver???
Je suis juste interessé par le procéder...
Un programme de dialogue alternatif.... A quand la Google Toolbar pour les aides au programmeur ...
0
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 209
27 févr. 2009 à 19:16
c'est pourquoi faire ce Lecteur de thread...
0
bonsoir,
non pas encore, j'ai rien trouvé quelqu'un peut nous aider???????????????



J'attends vos réponse.
0
bonsoir,
j'ai trouvé ce code sur le net.je veux juste le tester et après je vais comprendre chaque instructions à quoi sert.


tu as trouvé quelques choses.
j'ai passer toutes la journée dans la recherche sur le net ei j'ai rien trouvé.
Lorsque j'utilise le pas à pas en eclipse que je trouve que le programme se bloque dans cette ligne:
nbbyte = inputStream.read(readBuffer,0,1);
j'éspère que quelq'un à trouver une solution qui peut nous aider.



merci.
0
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 209
27 févr. 2009 à 19:43
Ta machine distante, ou ton lecteur distant, n'est pas ouvert.
En gros tu peux pas le debeugger comme cela.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour,
J'ai pas bien compris qui ce que tu veux dire par "mon lecteur distant, n'est pas ouvert. ".
Est ce que tu as trouvé quelques choses.
à ton avis comment je peux le debeugger???



Est ce qu'il y'a des solutions.


Merci.
0
Bonsoir,
J'ai déjà créer un poste auquel j'ai spécifier mon problème.
Alors le premier problèe ça existe au niveau de la trame qui n'est pas compatible avec le terminal auquel je fais l'envoi.



Voici le copde utilisé:


package pack1;

import javax.comm.*;
import java.io.*;
import java.util.*;

public class Test1
{
CommPortIdentifier portId;
SerialPort serialPort;

public Test1(String com)
{
System.out.println("listage des ports série disponibles:");
listePortsDispo();
try
{
portId=CommPortIdentifier.getPortIdentifier(com);
serialPort=(SerialPort)portId.open("Envoi",2000);

serialPort.setSerialPortParams(9600,SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
System.out.println("Ouverture du port "+com);

BufferedReader in=new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
OutputStream out = serialPort.getOutputStream();

String originalText="Trame à envoyer";//Suite à votre trame
byte[] outputArray = originalText.getBytes( );
out.write ( outputArray, 0 , outputArray.length );
int b = in.read();
String reponse=in.readLine();
System.out.println("ligne: "+b+"\n Réponse: "+reponse);
in.close();
out.close();
}
catch (Exception e)
{
e.printStackTrace();
}
serialPort.close();
}//fin constructeur

public void listePortsDispo()
{
System.err.println("recherche...");
Enumeration portList=CommPortIdentifier.getPortIdentifiers();
if (portList==null)
{
System.err.println("Aucun port de communication détecté");
return;
}
while (portList.hasMoreElements())
{
portId=(CommPortIdentifier)portList.nextElement();
System.out.println("* "+portId.getName());
} // while
} //fin de la methode listePortsDispo()

public static void main(String args[])
{
new Test1("COM5");
}//fin du main


}//fin de la classe
0