2010-05-23 7 views
1

J'ai 2 applications console Windows, lisant depuis l'entrée standard et l'écriture vers la sortie standard. Je voudrais supposer que je n'ai pas le code source à l'un d'entre eux (en fait, j'ai généralement le code source de l'un d'entre eux). Je veux diriger la sortie standard de l'un vers l'entrée standard de l'autre et inversement, permettant ainsi la communication (le but est de permettre à deux programmes jouant un certain jeu de jouer l'un contre l'autre).Comment faire pour que 2 exécutables communiquent dans les deux sens sous Windows

Comment cela peut-il être fait? Je suis prêt à faire de la programmation C/C++ ou toute autre chose requise.

Oren.

Répondre

1

Cela n'est pas possible dans une console, car la redirection de flux forme toujours un graphe acyclique.

Pour obtenir la redirection cyclique que vous recherchez, vous pouvez coder un petit programme qui appelle vos deux exécutables, et gère le câblage des flux d'entrée et de sortie de chaque processus. Chaque paire de flux connectés (un flux d'entrée et un flux de sortie de chaque programme) aura besoin d'un thread pour extraire les données du flux de sortie et les insérer dans le flux d'entrée. Donc, vous aurez besoin de 2 threads, puisqu'il y a 2 ensembles de paires de flux d'entrée/sortie.

Voici les étapes consistant à relier les divers courants:

  • créer deux tampons, B1 et B2.
  • lancez le programme 1, (P1) et récupérez les poignées de flux d'entrée et de sortie.
  • connecter l'entrée P1 à l'entrée du tampon B1 et la sortie P1 à la sortie du tampon B2.
  • lancer le programme 2, (P2) et extraire les lignes de flux d'entrée et de sortie
  • connecter l'entrée P2 à l'entrée du tampon B2 et la sortie P2 à la sortie du tampon B1. (Notez que ce B1/B2 est inversé de connexion P1 ci-dessus.)

Les tampons sont des threads actifs, en lisant du côté de l'entrée et en écrivant du côté de la sortie.

Le tampon devra détecter la fin du flux du côté de l'entrée et fermer le côté de sortie en conséquence. Lorsque les deux côtés sont fermés, le thread qui exécute le tampon peut quitter.

+0

Merci! Ça marche. J'ai implémenté cette idée de threading (en python, comme suggéré par kerkeslager). Merci beaucoup! – user302099

0

Vous devrez faire les deux processus en sous-processus d'un processus parent, qui passera les messages entre les deux processus, et vous devrez écrire le processus parent.

Il ya beaucoup de langues dans lesquelles cela pourrait être résolu. Personnellement, j'aborderais cela avec le module subprocess en Python. C'est essentiellement un wrapper autour de _popen() qui peut être consulté en C/C++, mais si une recherche rapide sur Google est un indicateur, vous aurez plus de facilité à apprendre Python que de l'utiliser. Si vous connaissez Ruby, il y a une bibliothèque similaire pour Ruby.

Dans tous les cas, je pense que l'utilisation de sockets serait une approche plus propre et plus fiable que d'utiliser stdin et stdout, si cela est tout à fait une option.

+0

Merci. Python sonne comme une bonne solution. Les prises ne sont pas une option (malheureusement). J'ai toujours un problème: de quel processus lire à chaque fois. C'est un problème si j'essaie de lire à partir d'un processus pendant qu'il attend que l'autre processus écrive quelque chose. Je devrais probablement faire quelque chose comme «sélectionner», mais pour autant que j'ai essayé et entendu, sélectionnez ne fonctionne pas dans Windows. Que peut-on faire? Merci. – user302099

Questions connexes