2010-11-06 4 views
2

Je pense à utiliser dans Windows un tuyau nommé pour communiquer entre deux applications écrites en Java et C. Normalement, j'utilise la connexion socket pour le faire, mais maintenant je dois annuler cette idée et trouver une nouvelle solution J'ai lu que le tube nommé dans java peut être visible uniquement à l'intérieur de la JVM. Est-ce vrai? Existe-t-il un moyen d'établir un canal nommé entre deux applications écrites dans une langue différente?Chemins nommés entre Java et les programmes C/C++

Sinon, quel type de technologie conseillez-vous?

Répondre

3

Pour créer un un canal nommé Windows dans Java, vous devez recourir à JNI pour appeler les fonctions WINAPI natives.

Vous pouvez cependant créer le canal nommé en C++ et le consommer en Java en l'ouvrant en tant que fichier dans l'espace de noms de canal après sa création.

0

Vous pouvez simplement démarrer un processus externe en Java et vous connecter à ses canaux.

// Execute command 
    String command = "ls"; 
    Process child = Runtime.getRuntime().exec(command); 

    // Get pipes from process 
    InputStream in = child.getInputStream(); 
    OutputStream out = child.getOutputStream(); 
    InputStream error = child.getErrorStream(); 
+2

Bien que je trouve votre solution proposée assez utilisable, ce que vous décrivez ne sont pas nommés tuyaux. Les tuyaux nommés doivent être adressables de l'extérieur (dans le cas des systèmes * nix via le système de fichiers). –

2

Les tubes nommés sont beaucoup plus difficiles à obtenir que d'utiliser des douilles. Conceptuellement, ils sont plus simples. Cependant, les rendre fiables et raisonnablement tolérants aux pannes est beaucoup plus difficile que pour les prises.

Je vous suggère de reconsidérer les prises, cela est conçu pour la communication entre les processus. Pouvez-vous clarifier pourquoi vous ne pouvez pas utiliser les douilles? La raison pour laquelle je demande est que les pipes nommées ont réellement utilisé des prises sur le bouclage dans la réalité.

Un tube nommé est une construction OS. Vous pouvez créer le canal nommé dans votre système d'exploitation et ensuite il peut être accédé comme s'il s'agissait d'un fichier par Java et C, ou tout autre programme. La communication entre les processus via le fichier est très difficile à obtenir (sinon impossible) Par exemple, vous ne saurez pas que lorsque vous écrivez dans le tube nommé, tout le lit à moins que vous ne conceviez votre propre protocole de contrôle de flux. (Très difficile à tester dans tous les cas)

Vous avez peut-être entendu parler de PipedInputStream et PipedOutputStream et ces classes ne peuvent être utilisés dans le même processus (ce qui les rend assez inutile)

EDIT: Si vous voulez une vue indépendante de la manière la plus commune et peut-être la plus sensée d'envoyer des données, je vous suggère d'essayer google.

java sockets - 2,210,000 hits 
java named pipes - 90,000 hits 

Alors peut-être que les sockets sont 25 fois plus sensibles que les tubes nommés. (et plus supportable car il ya plus de tutoriels et de personnes qui ont de l'expérience avec eux)

+0

Mon patron a dit que je ne peux pas utiliser de sockets donc je ne peux pas :) Le vrai est que j'ai écrit la partie Java et mon ami du travail fait partie C/++/Delphi. Son patron a dit que les prises sont plus difficiles à mettre en œuvre et m'a forcé à penser à autre chose ... alors pour l'instant, je choisis des tuyaux nommés. – lipkerson

+0

Vous avez écrit que la mise en œuvre des tubes nommés est simple mais la rendre stable est difficile ... hmm Dans mon projet il y a une structure très simple de données échangées: une chaîne dedans et une réponse dehors et c'est tout. Pensez-vous toujours qu'il sera difficile de faire cela stable? Thx pour replay :) – lipkerson

+0

Votre patron a dit que vous ne pouvez pas utiliser les prises? Pourquoi? Quel est son budget pour votre courbe d'apprentissage sur les alternatives? Quelle est l'atténuation de ses risques au cas où cela ne fonctionnerait pas? Ou au cas où vous ne pouvez pas le faire fonctionner à temps? Quelles sont les exigences métier qui correspondent à l'interdiction d'utiliser des sockets? – EJP

Questions connexes