IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Inter process Communication


Sujet :

Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 12
    Points : 7
    Points
    7
    Par défaut Inter process Communication
    Bonjour tout le monde !

    J'aimerais faire communiquer entre deux applications et je voulais le faire différement de d'habitude et de manière plus efficace j'espère (habituellement je le fais avec des sockets UDP).

    J'ai une interface graphique que je voudrais créer en vb6 (for fun car je connais pas encore ce language et qu'il parait qu'il est sympa pour faire de l'interface graphique sous windows). Et celle-ci devrait communiquer avec mon programme java qui lancera mon interface graphique en vb6.

    J'ai lu le tuto sur le lancement de programme externe en java

    http://ydisanto.developpez.com/tutoriels/j2se/runtime/

    Et je vais lancer mon interface graphique le plus simplement du monde :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    public class Main {
    	public static void main(String[] args){
    		Runtime runtime = Runtime.getRuntime();
    		try {
    			final Process process = runtime.exec(new String[] { "C:/Users/Abbadon/Desktop/myGUI.exe" } );
    			try {
    				BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
    				String line = "";
    				try {
    					while((line = reader.readLine()) != null) {
    						System.out.println("Super ligne lue :" + line);
    					}
    				} finally {
    					reader.close();
    				}
    			} catch(IOException ioe) {
    				ioe.printStackTrace();
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    }
    Dans ce code j'ai fait un petit test pour l'instant mon interface graphique ne fait que généré un message et puis quitte et mon message apparaît bien sur la sortie de ma console éclipse, le comportement est donc tout à fait celui espéré.

    Maintenant en fait j'aimerais savoir le méchanisme à l'oeuvre derrière ce process.getInputStream(), en fait c'est simplement un pipe ? Je veux dire que je pourrais obtenir exactement le même effet en point de vue performance en créant un pipe entre mes deux process?

    Et j'aimerais savoir comment ouvrir ce pipe correctement si je fais ça en deux language différents (imaginons que je veuilles utiliser la sortie standard de ma gui pour autre chose et utiliser un autre cannal pour communiquer ) ? Comment on passe un "flux" sous windows à une application externe?

    Merci d'avance, si je n'ai pas été clair n'hésitez pas à me reprendre je tacherai de clarifier .

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Citation Envoyé par Abbadon1988 Voir le message
    Maintenant en fait j'aimerais savoir le méchanisme à l'oeuvre derrière ce process.getInputStream(), en fait c'est simplement un pipe ?
    Ben oui
    LEs entrées/sorties standard de l'application lancée, sont liées à ces streams java.
    Et j'aimerais savoir comment ouvrir ce pipe correctement
    Ce n'est pas vous qui l'ouvrez, c'est exec
    si je fais ça en deux language différents (imaginons que je veuilles utiliser la sortie standard de ma gui pour autre chose et utiliser un autre cannal pour communiquer ) ? Comment on passe un "flux" sous windows à une application externe?
    On peux pas, le seul flux partagé, c'est input,output et error stream, bref les streams standard. C'est vrai qu'en C ou autre on pour ouvrir tout un tas de pipe avant le fork, mais ici c'est limité

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup pour ta réponse rapide!

    Quels sont les autres moyens de communications dans ce cas ? Execpté les sockets si je veux pas utiliser la sortie standard (c'est juste pour le sport hin ).

    Y a pas moyen d'utiliser des appels systèmes en travaillant directement avec l'os et faire l'équivalent de l'autre coté dans un autre langage pour synchroniser le tout?

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    je connais pas windows. Sous unix, il y a les segments de mémoire partagé qui sont souvent utilisés our la comm inter process. Il y a aussi les Socket unix (c'est comme des fichiers "virtuels" sur lesquels tu écrit).
    Pour les sockets unix ça doit etre posssible en java de les utiliser (mais dur de les créer). Pour les segments de mémoire partagée, ce sera galère (le modèle mémoir de la JVM n'est pas le modèle réel de l'OS)

Discussions similaires

  1. Communication inter process
    Par thegitch dans le forum C#
    Réponses: 9
    Dernier message: 03/07/2009, 14h23
  2. Communication Inter Process C# C++
    Par Moustico dans le forum C++/CLI
    Réponses: 3
    Dernier message: 13/03/2009, 14h49
  3. Inter process communication
    Par swingNJava dans le forum Linux
    Réponses: 8
    Dernier message: 27/09/2008, 23h08
  4. Réponses: 18
    Dernier message: 04/02/2008, 12h20
  5. WMI pour communication inter process
    Par dominoz dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 20/08/2007, 14h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo