Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 20/04/2007, à 17:50

dialloma

[résolu] Programmation client-serveur (c'est chaud !!!)

Bonjour à tous,

Je ne suis pas expert de la programmation Web mais c'est quelque chose qui me pasionne beaucoup. Etant débutant, plein de chose restent encore floues pour moi notament le développement coté serveur. Alors je ne vais pas pauser des questions débiles, tout ce que je veux c'est un guide pour débutant pour comprendre les différentes approches de programmtion client-serveur. Si vous avez des tutoriels, des livres ou quoi que ce soit que vous pouvez me recommander, je serai ravi de l'accepté. Je veux comprendre le mécanisme d'abord et je verrai comment approfondire mes connaissances. Mais c'est vraiment chaud pour moi. J'ai lu plein de chose et je pense que je n'ai pas encore fixé la chose très bien. SOS S'il vous plaît.

Je vous remercie d'avance et je vous souhaite bon week-end.

Dernière modification par dialloma (Le 24/04/2007, à 09:59)

Hors ligne

#2 Le 20/04/2007, à 19:34

Watchwolf

Re : [résolu] Programmation client-serveur (c'est chaud !!!)

client-serveur, Web c'est bien différent ca.

Si tu veut un exemple de client/serveur ecrit en C regarde ici:
http://www.cppfrance.com/code.aspx?ID=9319

Apres precise ce que tu veut exactement.

Hors ligne

#3 Le 21/04/2007, à 10:06

androme

Re : [résolu] Programmation client-serveur (c'est chaud !!!)

Il parle de programmation WEB donc plutôt d'une plate forme LAMP (Linux - Apache - Mysql - PHP)

Il existe des tonnes de tutoriels sur le net en se donnant la peine de chercher.


Intrepid Ibex 64

Asus P5B Deluxe, Q6600, 4Go, 8800GTS 512 Dual Screen (22w + 19w).
Portable Dell D830

Hors ligne

#4 Le 21/04/2007, à 17:14

Link31

Re : [résolu] Programmation client-serveur (c'est chaud !!!)

Watchwolf a écrit :

Si tu veut un exemple de client/serveur ecrit en C regarde ici:
http://www.cppfrance.com/code.aspx?ID=9319

Le code proposé dans cette page ne fonctionne pas. Voici le code corrigé :

server.c

/*********************/
/**** LE SERVER ******/
/*********************/

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <stdio.h>
#include <stdlib.h>

#define NSTRS       3           // nombre de lignes que l'on va afficher quand le client vas se connecter/

#define ADDRESS     "mysocket"  // addresse de connection 

//Message que nous voulons envoyer au client
char *strs[NSTRS] = {
  "Bonjour, je suis le server et j'envoi un message\n",
  "au client, (ici nous somme ne deuxieme ligne).\n",
  "et la et bien il faut dire enrevoir sur la 3eme ligne :-p.\n"
};

int main(int argc, char** argv)
{
  char c;
  FILE *fp;
  socklen_t fromlen;
  register int i, s, ns, len;
  struct sockaddr_un saun, fsaun;  //declaration des sockets  

  //Ici on creer une socket de type STREAM que l'on va utiliser poir la communication
  //entre le server, ce fichier, et le client
  if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) 
  {
    perror("server: socket"); //si ca foire on affiche => server: socket (c'est pour dire que c'est la socket du server qui a merder)
    exit(1);
  }

  //on creer l'adresse avec laquel on va faire communiquer le server et le client
  saun.sun_family = AF_UNIX;
  strcpy(saun.sun_path, ADDRESS); 

  //ici on defait le lien que l'on avait creer sur ADRESSE 
  unlink(ADDRESS);

  //la on prend la taille de la structure
  len = sizeof(saun.sun_family) + strlen(saun.sun_path);

  //la on fait ce que l'on appelle un bind (raccourci en francais)
  if (bind(s, (struct sockaddr *)&saun, len) < 0) 
  {
    perror("server: bind"); //si ca merde on affiche que c le bind qui merde
    exit(1);
  }
  
  //on ecoute la socket
  if (listen(s, 5) < 0) 
  {
    perror("server: listen");  //si ca merde
    exit(1);
  }
  
  //ici on accepte la connection du client
  //et a ce moment la fsaun contient l'adresse du client
  if ((ns = accept(s, (struct sockaddr *)&fsaun, &fromlen)) < 0) 
  {
    perror("server: accept"); //bon comme vous l'avez compris ca c'est si ca merde
    exit(1);
  }  
  
  //ca c'est parceque l'on utilise stdio pour lire la socket
  fp = fdopen(ns, "r");
  
  //on commence par envoyer les strint (chaine de caractere :-p au client
  for (i = 0; i < NSTRS; i++)
    send(ns, strs[i], strlen(strs[i]), 0);
  
  //quand le client lis les string il les affiche
  for (i = 0; i < NSTRS; i++) 
  {
    while ((c = fgetc(fp)) != EOF) 
    {
      putchar(c);
      if (c == '\n')
         break;
    }
  }
  
  //on a juste a utiliser tout simplement close(); pour fermer la socket
  close(s);

  exit(0);
}

client.c

/***********************/
/****** LE CLIENT  *****/
/***********************/

//Bon la pour le client je n'est pas mis de commentaire car c'est quasiment identique au server les foonctions utilisees sont ls memes donc pas la peine de reexpliquer 2 fois la meme chose ;-)

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <stdio.h>
#include <stdlib.h>

#define NSTRS       3           // nombre de lignes que l'on veut envoyer au server

#define ADDRESS     "mysocket"  // adresse sur laquel on communique avec le server (en fait c'est un ficheir verrouiller que l'on creer)

//les messages que l'on veut envoyer au server
char *strs[NSTRS] = {
  "Salut moi je suis le client.\n",
  "et comme tu voi je peut aussi envoyer.\n",
  "des messages lol.\n"
};

int main(int argc, char** argv)
{
  char c;
  FILE *fp;
  register int i, s, len;
  struct sockaddr_un saun;

  if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) 
  {
    perror("client: socket");
    exit(1);
  }

  saun.sun_family = AF_UNIX;
  strcpy(saun.sun_path, ADDRESS);

  len = sizeof(saun.sun_family) + strlen(saun.sun_path);

  if (connect(s, (struct sockaddr *)&saun, len) < 0) {
    perror("client: connect");
    exit(1);
  }

  fp = fdopen(s, "r");

  for (i = 0; i < NSTRS; i++) {
    while ((c = fgetc(fp)) != EOF) {

      putchar(c);
      
      if (c == '\n')
        break;

    }
  }

  for (i = 0; i < NSTRS; i++)
    send(s, strs[i], strlen(strs[i]), 0);

  close(s);

  exit(0);
}

Hors ligne

#5 Le 21/04/2007, à 19:07

Watchwolf

Re : [résolu] Programmation client-serveur (c'est chaud !!!)

je ne l'avait pas testé, jsute trouvé depuis google.

Hors ligne

#6 Le 24/04/2007, à 09:59

dialloma

Re : [résolu] Programmation client-serveur (c'est chaud !!!)

Désolé, je n'étais pas disponible les jours passés, c'est pourquoi je n'ai pas réagit. Merci à tous pour vos réponse et je vais voir ce que vous m'avez dit.

Bonne journée

Hors ligne