-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
hello,
d�sol� pour le off-topic...
Dans le cadre d'un dossier pour l'ecole, je dois r�aliser un serveur (qui
gere des stocks et des commandes de m�dicaments) en C et un client en
java. (Il va de soi que le serveur C doit tourner sur une machine Unix
quelconque et que le client java doit tourner sur tout ce qui a une jvm
:p)
Une des restrictions est qu'une commande est une structure dans laquelle il
y a
- - la date et l'heure
- - le num de code du m�dicament
- - le nom
- - l'unite de mesure
- - la quantit� demand�e
j'avais donc une struct
struct commande {
char date[50];
char num_code[15];
char nom[20];
char unite_mesure[4];
int quantite;
};
Le probl�me, c'est que de C � C ou � C++, ca ne pose pas de tracas.
Mais avec java.... D�ja rien que le "int" posait des probl�mes (big/little
endian, taille d'un int, ...)
je l'ai donc mis en char[] �galement. Soit.
Comme solution, j'ai trouv� ceci (en simplifi� bien entendu)
le serveur :
#include .....
struct plop {
char a[50];
char b[20];
};
struct in_addr adresseIP;
struct sockaddr_in adresseSocket;
socklen_t tailleSockaddr_in;
int main (int argc, char **argv) {
int hSocket;
int sock;
plop *co = (struct plop*) malloc (sizeof (struct plop));
uint taille = 0;
int i = 0;
if ((hSocket = socket(AF_INET,SOCK_STREAM,0)) == -1) {
exit (1);
}
memset(&adresseSocket,0,sizeof(struct sockaddr_in));
adresseSocket.sin_family = AF_INET;
adresseSocket.sin_addr.s_addr = inet_addr ("0.0.0.0");
adresseSocket.sin_port = htons(7310);
if (bind (hSocket,
(struct sockaddr *)&adresseSocket,
sizeof(struct sockaddr_in)) == -1) {
close (hSocket);
exit (1);
}
if (listen (hSocket, 10) == -1) {
close (hSocket);
exit (1);
}
if ((sock = accept (hSocket,
(struct sockaddr*) &adresseSocket,
&tailleSockaddr_in)) == -1) {
close (hSocket);
exit (1);
}
do {
if ((i = recv (sock,
((char *)co) + taille,
sizeof(plop) - taille, 0)) == -1) {
close (sock);
close (hSocket);
exit (1);
}
taille += i;
} while (i != 0 && i != -1 && taille < sizeof (plop));
fprintf (stdout, "%s %s\n", co->a, co->b);
fflush (stdout);
close (sock);
close (hSocket);
}
et le client java
import ...;
public class test extends Socket {
public test () throws Exception {
super ("127.0.0.1", 7310);
DataOutputStream dos = new DataOutputStream (getOutputStream());
StringBuffer m = new StringBuffer (100);
com c = new com ("plik", "plok");
m.append (c.a);
m.append (c.b);
String pp = new String (m);
dos.write (pp.getBytes());
}
private class com {
public String a;
public String b;
public com (String aa, String bb) {
StringBuffer bf = new StringBuffer (50);
bf.append (aa);
bf.setLength (50);
a = new String (bf);
bf = new StringBuffer (20);
bf.append (bb);
bf.setLength (20);
b = new String (bf);
}
}
public static void main (String[] argv) {
try {
new test();
} catch (Exception e) {
System.err.println (e.getMessage());
}
}
}
R�sultat, �a fonctionne tr�s bien... mais je me demandais si il n'y avait
pas moyen d'�viter ce gros (et laid) hack des StringBuffer et du
remplissage de \0 des String java. De plus, y a t'il un moyen pour quand
meme pouvoir envoyer des int ou pas ?
merci d'avance et d�sol� pour ceux que mon message auront d�rang�s.
cu,
benjamin
- --
default: assert(1==0); /* autant dire que j'ai pas envie que ca arrive */
-- pouaite, code de wmcoincoin
Benjamin Michotte <[EMAIL PROTECTED]>
web : http://www.baby-linux.net
homepage : http://www.michotte.org
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.0 (GNU/Linux)
iD8DBQE+AKn0Ejhm4PB0YzkRArB7AJ9sZKiy+KwKlKJflvaEoGwRz1dQqACeJZCn
FpuWz/p3vizyT3UKvOm2NMU=
=Ct8F
-----END PGP SIGNATURE-----
Vous souhaitez acquerir votre Pack ou des Services MandrakeSoft?
Rendez-vous sur "http://www.mandrakestore.com"