2010-04-16 4 views
3

J'ai deux programmes distincts, l'un en Java et l'autre en C++, fonctionnant sous Windows. Nous devons faire une communication interprocessus bidirectionnelle entre les deux. Jusqu'à présent, nous utilisions cette solution délicate d'écriture dans des fichiers texte et de les lire de l'autre côté, où le producteur produisait un fichier .lock quand il avait fini d'écrire et que le consommateur l'enlevait quand il avait fini de lire ... comme je l'ai dit, maladroit.Communication Java/C++ via un tube sous Windows

Si nous étions sur * nix, nous utiliserions un tube en utilisant popen() sur le C++ et RadomAccessFile du côté Java. Cela semble bien fonctionner. Que pouvons-nous faire sur Windows?

Pouvons-nous utiliser des tuyaux nommés?

Merci.

Répondre

2

Jetez un oeil à des tampons de protocole Google: http://code.google.com/apis/protocolbuffers/docs/overview.html

Cela fournit un mécanisme de sérialisation entre Java et C++.

Et puis google pour une implémentation de flux C++ pour les sockets et envoyer des messages entre Java et C++ via TCP.

+0

Nous l'avons fait en utilisant notre propre protocole .... merci. – Warlax

2

Je recommanderais les sockets pour IPC si vous utilisez un mélange de Java et C++. Les sockets semblent être une solution plus robuste que l'écriture/verrouillage d'un fichier partagé :).

Cependant, je vais vous indiquer this poster SO ... Il semble que vous pouvez utiliser des canaux nommés sur le côté .NET et RandomAccessFile à la fin Java: http://v01ver-howto.blogspot.com/2010/04/howto-use-named-pipes-to-communicate.html

Donnez un coup de feu ... il semble prometteur

+0

Polaris, merci. J'ai vu ce post et le blog correspondant. J'ai même implémenté le côté Java alors qu'un collègue implémentait des pipes nommés en C++. Le problème est que Java se plaint d'une exception de fichier non trouvé car "\\\\. \\ pipe \\ testpipe" n'existe pas. Maintenant, en cours d'exécution sur un Mac, le \\. \ Pipe \ testpipe crée simplement un fichier et fonctionne sans problème. Mais nous ne déployons pas sur * nix, malheureusement assez. – Warlax

Questions connexes