Communication programmes C - C - Programmation
Marsh Posté le 29-11-2011 à 17:13:50
C sur Windows, ou C sur Unix, ou autre.
Avec Windows, on peut envoyer un message, de type "User-defined message", à l'autre application et passer des données en paramètre. L'autre application peut capter ce message dans sa boucle de gestion des messages, et agir en conséquence. Il est aussi possible de mettre les données dans le presse-papier (clipboard).
Avec Unix, on peut utiliser la mémoire partagée. Voir http://en.wikipedia.org/wiki/Inter [...] munication .
Marsh Posté le 29-11-2011 à 20:32:04
Tu as un large choix de moyen de communiquer entre différents processus : les mécanismes IPC ( file de message, shared memory ), les tubes , de simples fichiers, des sockets, des communications réseaux.
Certains n'existent que sous Unix, d'autres sous windows également.
Après, il faut choisir le moyen le plus adapté à ce que tu souhaites faire.
Marsh Posté le 30-11-2011 à 09:30:08
Bonjour, et merci pour vos réponses.
Actuellement mes deux applications communiquent via un fichier.
Application 1 modifie le fichier, Application 2 lie le fichier et va modifier dans la structure où sont stockés les données du fichier.
sauf que ce traitement prend du temps, d’où le choix d'aller directement modifier les valeurs dans la structure pour un traitement plus rapide.
Mes deux application sont sur Windows et en C.
Voila donc je ne sais ce qui est le plus adapté.
Merci d'avance.
Marsh Posté le 30-11-2011 à 11:23:01
Sous windows, tu peux utiliser les shared memory file : http://msdn.microsoft.com/en-us/library/dd997372.aspx
Attention cependant, c'est du code non portable, et l'exemple que je te donne nécessite .net framework.
Il me semble qu'il existe une version win32 au cas où tu ne puisses pas utiliser .net framework ( car c'est pas du C, c'est du C++ managé made in microsoft ).
Sinon, si tu veux une solution portable, une solution est de communiquer via une socket réseau, en mode connecté ou non. ( man socket/open/connect/accept/bind/send/recv/close/shutdown sous google ).
Marsh Posté le 30-11-2011 à 16:48:31
Merci xilebo pour ta réponse,
Voila j'ai suivi ton conseil et j'ai regardé un peu les sockets.
j'ai fait deux applications pour tester le fonctionnement des sockets avant d'attaquer mon projet.
j'ai fait un programme serveur et un client.
Dans mon programme serveur j'ai crée une structure Personnage qui contient le nom, le prénom et l'age.
Ensuite j'ai déclaré une variable Personnage et j'ai rempli ses composants:
J'ai réussi à envoyer les valeurs de cette structure à mon programme client.
Ma question est comment je pourrai à partir de mon programme Client changer par exemple les valeurs age, nom et prénom.
Merci d'avance
Marsh Posté le 06-12-2011 à 13:59:42
Bonjour,
la communication entre mon code serveur et mon code client marche avec les socket, mais je n'arrive pas à envoyer les données à partir du client vers le serveur, j'ai essayé de mettre un send dans mon client mais ça ne marche pas.
donc je n'arrive pas à communiquer dans l'autre sens client -> serveur, si quelqu'un peut m'aider.
Voila mon code serveur :
Code :
|
et voila mon code Client:
Code :
|
Marsh Posté le 06-12-2011 à 15:10:48
je ne sais pas si le recv est bloquant ou non par défaut, mais s'il ne l'est pas, et que les données n'ont pas encore été envoyées, c'est normal que tu ne les recoives pas.
Voir la fonction select pour écouter avec attente. ( si select retourne qu'il y a des datas, faire le recv à ce moment là ).
Attention aussi lors de l'envoi de données ( des entiers 32bits par exemple) sur le réseau si les machines n'ont pas la même endianess.
Marsh Posté le 06-12-2011 à 15:34:31
Désolé, mais je n'ai pas compris ce qu'il faut faire, la j'ai posté le code qui permet de transmettre des données du code serveur au code client, et ça marche.
Ce que je ne sais pas faire et d'envoyer des données de mon code Client à mon code serveur.
Donc qu'est ce qu'il faut ajouter à mon code client pour qu'il puisse envoyer des données via les sockets au code serveur.
Marsh Posté le 06-12-2011 à 15:49:32
C'est le meme code mais dans l'autre sens. Ton client fait un send, et ton serveur un recv. Par contre, il faut veiller à être bien synchronisé pour que le recv du serveur soit bien fait après le send du client.
Marsh Posté le 06-12-2011 à 17:23:20
Peux tu stp me montrer dans mon code ou est ce qu'il faut mettre le send dans le code client, car je suis un peu perdu.
Je l'ai mis avant la fermeture de la socket mais ça ne marche pas.et pareil pour le code serveur j'ai mis le recv avant la fermeture de la socket.
Merci d'avance.
Marsh Posté le 06-12-2011 à 17:29:19
comme je t'ai dit plus haut, si ton recv retourne avant que le send soit fait, il va rien recevoir et quitter. Il faut donc que ton recv attende un temps suffisant ( par exemple une seconde ) avant de considérer qu'il ne recevra pas de données.
Tu fais ça avec un select de la façon suivante :
Code :
|
select va attendre jusqu'à 1 seconde pour voir si des données ont été reçues. Si avant 1 seconde c'est le cas, select retourne immédiatement avec une valeur de retour t'indiquant que des données sont reçues, il te suffit alors de faire un recv derrière pour les récupérer.
je te laisse l'adapter à ton code.
Marsh Posté le 06-12-2011 à 20:03:44
Quelques remarques :
Marsh Posté le 29-11-2011 à 16:56:02
Bonjour à tous,
j'ai deux applications en C, la première contient une structure, et j'aimerai accéder à cette structure à partir de la deuxième application afin de pouvoir lire et écrire dans cette structure.
donc j'aimerai faire communiquer ces deux programmes en C.
J'ai vu qu'on peut utiliser la mémoire partagé pour le faire, mais je ne sais pas vraiment comment faire.
Si quelqu'un peut m'aider svp.
Merci d'avance.