Chargement des données et envoie via des sockets

akramuniversite Messages postés 32 Date d'inscription jeudi 13 janvier 2011 Statut Membre Dernière intervention 21 octobre 2011 - 8 août 2011 à 13:49
akramuniversite Messages postés 32 Date d'inscription jeudi 13 janvier 2011 Statut Membre Dernière intervention 21 octobre 2011 - 9 août 2011 à 12:58
Bonjour,
je fais un projet de fin d’études ,je suis débutant en java .ce projet consiste a collecter des informations de l'environnement extérieur du véhicule (ce code est une partie) et après a l'aide de l'instruction

Logger.log("gps "+ " Lat: " + p.get_lat()+ " Lon: " + p.get_long());//cette instruction prend les données de la route et les enregistre dans un fichier texte


on peut enregistrer des fichiers texte qui contiennent les données de la route .le problème que j'ai est que je ne sais pas comment prendre ce fichier et l'envoyer vers un autre logiciel via des Socket .a noter que le logiciel de réception est RTMaps (codé en C++).
public void handleEvent(Event arg0) {
if(arg0.getTopic() == "poma_position_arrived") {
if(POMA_raw_positionning_Service != null) {
Position p = POMA_raw_positionning_Service.GetCurrentPosition();

if(p.get_height() == 0)	return ; // TODO:: Reject non fullfield data

raw_position = new RAWPosition(p);
Logger.log("gps "+ " Lat: " + p.get_lat()+ " Lon: " + p.get_long());//cette instruction prend les données de la route et les enregistre dans un fichier texte
if(old_position != null && old_position.get_timestamp() != raw_position.get_timestamp()) {
if (RoadToolBox.inst.getDistanceBetween(old_position, raw_position)>5){//on regarde si on est a l'arrêt
raw_position.set_heading(RoadToolBox.inst.getHeadingFromNorth(old_position, raw_position));
raw_position.set_velocity_north(RoadToolBox.inst.getVelocity(old_position, raw_position)[0]);
}
}
old_position = raw_position;				
}
} else if (arg0.getTopic() == "poma_mapmatched_position_arrived") {
if(POMA_raw_positionning_Service != null) {
System.out.println("WARNING:: MapMatched position from POMA not catched !!!");
//mm_position = null; POMA_raw_positionning_Service.GetCurrentPosition());
}
}		
}

svp svp si quelqu'un peut m'aider merci d'avance

3 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
9 août 2011 à 12:26
Bonjour,

Il y a cette solution trouvée sur internet : http://www.commentcamarche.net/forum/affich-4745177-java-transfert-de-fichier-par-sockets

Par contre, je ne sais pas si l'envoi de fichier via des socket en java est la meilleure idée. Y a t-il dans l'entreprise où tu travaille une solution d'ordonnancement (VTOM, $U ou autre) qui permettrait de faire l'envoi et de notifier de la disponibilité des fichiers ton application.

As tu la main sur l'application en C ?
0
akramuniversite Messages postés 32 Date d'inscription jeudi 13 janvier 2011 Statut Membre Dernière intervention 21 octobre 2011
9 août 2011 à 12:57
merci mais moi je veux savoir comment transférer un fichier
//voila je veux savoir comment je vais joindre le fichier texte pour l'envoyer vers l'autre logiciel via des Sockets
//ON PREND LES DONNEES VENANT D'EDA
//côté rtmaps

public static void sendFile(String pathname,String serv) throws Exception 
{ 
File f = new File(pathname); 
if(f.exists()) 
{ 
System.out.println("Envoi du fichier "+f.toURI().toURL());  
Socket s = new Socket();
OutputStream fluxsortie = s.getOutputStream(); 

long taillefichier =f.length(); 

System.out.println("Taille : "+ taillefichier); 

long nbpassagesuposé=taillefichier / 4096; 

System.out.println("Passages supposés : "+nbpassagesuposé); 

InputStream in = new BufferedInputStream(new FileInputStream(f)); 
ByteArrayOutputStream tableaubytes = new ByteArrayOutputStream(); 
BufferedOutputStream tampon = new BufferedOutputStream(tableaubytes); 

int lu = in.read(); 
int[] aecrire = new int[4096]; 
int compteur = 0; 
long ouonestrendu=0; 

//Tant qu'on est pas à la fin du fichier 
while(lu > -1) 
{ 
//On lit les données du fichier 
aecrire[compteur] = lu; 
lu = in.read(); 
compteur++; 


//Quand on a rempli le tableau, on envoie un paquet de 4096 octets 
if(compteur == 4096) 
{ 
compteur=0; 
ouonestrendu++; 
//On remplit le tampon 
for(int x=0;x<4096;x++) 
tampon.write(aecrire[x]); 
   //Et on l'envoie 
fluxsortie.write(tableaubytes.toByteArray()); 

tableaubytes.reset(); 
System.out.println("Avancement : "+(float) ouonestrendu/nbpassagesuposé * 100+"%"); 
} 
} 

//On envoie le dernier paquet, qui ne fait pas forcément 4096 octets 
//On remplit le tampon 
for(int x=0;x<4096;x++) 
tampon.write(aecrire[x]); 

//Et on l'envoie 
tampon.flush(); 
fluxsortie.write(tableaubytes.toByteArray()); 
fluxsortie.flush(); 

System.out.println("Avancement: "+(float) ouonestrendu/nbpassagesuposé * 100+"%"); 

System.out.println("Youpi finished"); 
in.close(); 
tampon.close(); 
System.out.println("Passages effectués : "+ouonestrendu); 
s.close(); 
} 
else 
{ 
System.out.println("Le fichier "+f+" est introuvable"); 
} 

} 



//coté EDA  

while(continuer) 
{ 

//On attend la connexion d'rtmaps

Socket serviceSocket = serveur.accept(); 

//Byte[] taillefichier; 
//int lu; 
//long taille = 0; 

//Création de l'entrée 
InputStream input = serviceSocket.getInputStream(); 

OutputStream out = new FileOutputStream(""); 

//Reçoit du client 
BufferedInputStream inBuffer = new BufferedInputStream(inpute); 

//Envoi vers le fichier 
BufferedOutputStream outBuffer = new BufferedOutputStream(out); 

lu = inBuffer.read(); 

int compteur = 0; 

while(lu > -1) 
{ 
outBuffer.write(lu); 
lu = inBuffer.read(); 

compteur++; 
} 

outBuffer.write(lu); 

outBuffer.flush(); 
outBuffer.close(); 
inBuffer.close(); 

out.flush(); 
out.close(); 
inpute.close(); 
serviceSocket.close(); 

}
0
akramuniversite Messages postés 32 Date d'inscription jeudi 13 janvier 2011 Statut Membre Dernière intervention 21 octobre 2011
9 août 2011 à 12:58
ici je voudrais savoir comment je vais joindre Le fichier que j'ai pour l'envoyer a RTMAPS?
0
Rejoignez-nous