begin process at 2012 05 29 18:04:21
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Réseau / Internet

 > 

pb communication socket


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

pb communication socket

mercredi 11 mai 2005 à 18:36:01 | pb communication socket

skyman272

bonjour

voici un petit programme client/serveur pour un projet à l'insa (sous linux).
Le programme client envoi un message au programme serveur qui lui répond par l'intermediaire d'une socket.
Le pb c'est que le client envoi son message, le serveur répond, puis la communication s'arrete.
Le programme client donne le message d'erreur "broken pipe"
Si quelqu'un a une idée pour me venir en aide... Merci

Le serveur :

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>

#define PORT 12345

int main()
{  FILE *fp;
   int sock, sock2, lg, pid;
   struct sockaddr_in local;
   struct sockaddr_in distant;
   char mess[80];  
   bzero(&local, sizeof(local));
   local.sin_family = AF_INET;
   local.sin_port = htons(PORT);
   local.sin_addr.s_addr = INADDR_ANY;
   bzero(&(local.sin_zero), 8);
   lg = sizeof(struct sockaddr_in);

   if((sock=socket(AF_INET, SOCK_STREAM, 0)) == -1)
   {
    perror("socket"); exit(1);
   }
   //le bind
   if(bind(sock, (struct sockaddr *)&local, sizeof(struct sockaddr)) == -1)
   {
    perror("bind");exit(1);
   }
   //Ecoute de la socket de connexion
   if (listen (sock, 5) == -1)
   {
    perror("listen");exit(1);
   }
   //boucle de reponse aux requetes clients
   for (;;)
   {
    if ((sock2=accept(sock, (struct sockaddr *)&distant, &lg)) == -1)
    {
     perror("accept");exit(1);
    }
    printf ("fin dialogue avec client \n");
    //creation du processus par le fork
    //le processus pere continue l'ecoute
    //le processus fils va repondre pour servir les clients connectes
    if ((pid=fork ()) < 0)
    {
     perror ("fork");
     exit (1);
    }
    //processus pere
    //ferme la connexion courante
    //continue d'ecouter
    if (pid > 0)
    {
     close (sock2);
     continue;
    }
    //processus fils
    //ferme la socket serveur
    //sert la connexion courante
    close (sock);
    printf ("connecté avec un client \n");
    while (strcmp(mess, "fin") !=0)
    {
     read(sock2,mess,80);
     printf("%s\n",mess);
     printf("entrer le message : ");
     gets(mess);
     write(sock2,mess,sizeof(mess)) ;
     strcat(mess,'\r\n');
       }
    printf ("fin dialogue avec client \n");
    close (sock2);
   }
   return 0;




Le client :

#include <stdio.h>
#include <netdb.h>
#include <fcntl.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define SERV "127.0.0.1"
#define PORT 12345

int main()
{ int port,sock;
  struct  sockaddr_in     serv_addr;
  struct  hostent         *serveur;
  char mess[80] ;
 
  port = PORT;
  serveur = gethostbyname(SERV);
  if (!serveur){fprintf(stderr, "Problème serveur \"%s\"\n",SERV);exit(1);}

  sock = socket(AF_INET, SOCK_STREAM, 0);
  bzero(&serv_addr, sizeof(serv_addr));
  serv_addr.sin_family = AF_INET;
  bcopy(serveur->h_addr, &serv_addr.sin_addr.s_addr,serveur->h_length);
  serv_addr.sin_port = htons(port);

  printf ("demande connexion\n");
  if (connect(sock,(struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
   {perror("Connexion impossible");exit(1);}
  printf ("client connecte \n");
 
  bcopy("",mess);
  while (strcmp(mess, "fin") !=0)
    { printf("entrer le message : "); gets(mess);
       write(sock,mess,sizeof(mess)) ;
       read(sock,mess,80);
       printf("%s\n",mess);
    }
  printf ("fin client \n");
  close (sock);
  return 0;
}

mardi 28 juin 2005 à 13:43:27 | Re : pb communication socket

jcqguill

Salut !
je viens d'essayer tes sockets.
modifie strcat(mess,'\r\n') par  bzero(mess,sizeof(mess))
dans ton serveur et ca devrai marcher.
(en tout cas chez moi ca marche nikel après la modife)





Cette discussion est classée dans : serveur, include, sock, addr, mess


Répondre à ce message

Sujets en rapport avec ce message

Client/Serveur avec thread sous linux [ par frater_sinister ] J'ai un prblm avec ce programme. Avant tout le but de ce code: le client envoit un fichier au serveur, ce dernier renvoit le nombre de lignes/mots/let à vos sockets, prêt, GO [ par mimou20052005 ] à vos sockets, prêt, GO Bon voila les gars j'ai enfin pu réaliser un client et un serveur en C++ (win 32 console application), mais j'ai un petit prob telechargement d'un fichier sur internet [ par fredleconte ] Salut, Voila j'essaie de telecharger un fichier http mais je ne sais pas comment recevoir le fichier help please. voici le programme: // Download d'u C++ Serveur web [ par kiki67100 ] Bonjour J'ai commencé a faire un serveur Pour affiché du texte sur le client Voici le code#include #include #include #include c<br aide creation serveur t'chat [ par crazygoth ] Bonjour Je dois réaliser un projet qui consiste a faire un serveur de t'chat en c sous Linux. je précise que je débute sous Linux et c également. Ma multicast en c sous windows [ par tenrod ] Bonsoir a tous,voila j'ai un petit (voire un gros) pb avec le développement d'une application me permettant de faire du multicast en c sous windows.J' erreur serveur multitheard en c [ par dyroj ] salut,j'ai créer un serveur echo en multithread et il marche a moitier sofe que par foi il confon les client.enfin c'est un peut bizare, par exemple q Unix: sockets & Co [ par bounkolh ] Bonjour, Je cherche de l'aide pour compléter les ............ du fichier client.c permettant d'interroger le serveur implementé par server.c. Listing programmation socket [ par you147 ] salut,j'ai un ptite application de programmation socket de chate client/ serveur sous lunix en C mais il y a un erreur je comprid pas cette erreur aid socket raw [ par moi zork ] Bonjour,Je suis entrain de m'entrainer sur les socket raw et je bute sur :#include #include using namespace std;int main (void){    int sock;  sock =


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,452 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales