-----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";

Répondre à