-
Dialogue entre C et java
Bonjour,
Je ne sais pas exactement si c'est la bonne place... Cela dit le problème est du côtés du java.
Mon problème est le suivant :
Pour un projet de fac j'ai un client en c qui doit fournir des informations sous la forme d'une structure avec des enums entre autre dedans.:)
J'ai un serveur qui doit recevoir cette fameuse structure est l'utiliser.:?
En Java il n'existe pas de type structure alors pour voir j'ai définie une classe du même nom avec les même attributs... Mais quand je la réceptionne j'ai une exception du genre corrupted...:aie:
Je ne sais pas trop comment en conséquence faire pour que les deux programmes puissent dialoguer.:evilred:
Quelqu'un pourrait-il m'aiguiller? Merci d'avance
Gwenhaël
-
Bonjour, il faut t'orienter vers le CORBA pour faire une couche de communication entre le client C et le serveur Java.
Le principe est de définir un fichier .idl qui déclare des structures/interfaces, compiler ce fichier avec un compilateur CORBA-> java, ça te donnera des .class à utiliser du côté serveur, un autre compilateur CORBA-> C pour obtenir les .c ou .h je ne sais plus.
Ensuite il faut démarrer la partie "serveur corba" en fonction de certains paramètres (hôte, port) et la partie "client corba" se connectera à ce serveur.
Il y a un forum corba pour plus de détails.
-
Tu peux établir un protocole de communication entre ton client C et ton serveur Java. Par exemple, tu envoies une trame au serveur Java via une socket dont le contenu sera :
- l'identificateur de la trame
- la taille de la trame
- les données à envoyer
tu vas par exemple envoyer
Citation:
01020champs_1champs_2
Oú 01 est l'identificateur de la trame et 020 la longueur de la trame.
-
Ca peut marcher aussi.
Tu peux aussi mettre un serveur http et envoyer des informations sous forme de requêtes.
-
Le problème fondamental c'est que je n'ai ni droit au corba ni à un serveur http.
J'ai juste un socket tcp entre les deux.
Sans parler que le dialogue doit être le plus rapide possible.
Le projet c un client pour un jeu.
Le c se connecte à un arbitre et à l'adversaire, le c se connecte au java qui lui même fait le pont avec prolog.
il faut que prolog à travers java, le socket et le c fournisse un coup en moins de 6 secondes...
-
C'est donc à toi de définir et implémenter la couche protocolaire. Vise la concision de la trame émise, mais fais très attention au codage des flotants et des signés qui peuvent varier entre les 2 langages.
-
Dans ce cas envoi des messages directement sur la socket comme l'a dit muad'dib par contre je ne sais pas si ça tiendra les contraintes de performances aller/retour.
-
Au final j'ai appliqué cette technique...
Deux cas se présentent. Soit juste une commande genre FIN, RESET,... Soit il y a des coordonnées.
Ce qui fait qu'au lieu de passer une structure avec une taille fixe trop importante dans certains cas j'envoie le strict minimum et ça marche impec.
Merci beaucoup