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

C

 > 

Linux

 > 

Réseau & Internet

 > 

Fin de recv


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

Fin de recv

dimanche 8 octobre 2006 à 19:32:20 | Fin de recv

Ziman

Bonjour,

je fais actuellement une chtite application. J'aimerai juste qu'un client se connecte sur un serveur et qu'il puisse lui envoyer des messages. Genre un msn ou un seul coté peut parler et k'autre coté affiche le texte envoyé.

En fait, si je fais juste un message sans boucle et tout, aucun probleme. Mais j'éai décidé de faire un Thread qui sert à sans cesse écouter un message qui pourrait etre recu.

Le problème ben c'est qu'il accumule les commandes. Si je tape :

Bonjour
Salut
Au revoir

Il ne va rien afficher mais quand je vais fermer le client, il va m'afficher les trois à la suite. J'aimerais qu'après chaque recv il affiche ce qu'il a récupérer.

Comment pourrais-je faire ?

Soyez indulgent, je débute dans la programme systeme et réseaux, donc le code pour les thread et socket peut etre un peu bizarre :

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

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

void *Recept(void *arg) {

  char commande[256];
  int *iExit = (int *) malloc(sizeof(int));

  int *Socket = (int*) arg;

  recv(*Socket, commande, sizeof(commande), 0);

  printf ("Commande reçue : %s", commande);

  if (strcmp(commande, "EXIT") == 0)
    *iExit = 1;
  else
    *iExit = 0;

  pthread_exit(iExit);

}

int main(int argc, char *argv[])
{

  int SockID = socket(PF_INET, SOCK_STREAM, 0);
  struct sockaddr_in Sin;
  struct sockaddr_in Sout;
  size_t Len = sizeof(struct sockaddr_in);
  int Socket;
  pthread_t TID;
  int *iExit;

  Sout.sin_addr.s_addr = inet_addr("127.0.0.1");
  Sout.sin_port = 666;
  Sout.sin_family = PF_INET;

  if ((bind(SockID, (struct sockaddr*) &Sout, sizeof(Sout))) == -1) {
    printf ("Erreur lors du bind : %d", errno);
    exit (-1);
  }

  if ((listen(SockID, 0)) == -1) {
    printf ("Erreur lors du listen : %d", errno);
    exit (-1);
  }

  if ((Socket = accept(SockID, (struct sockaddr *) &Sin, (socklen_t*) &Len)) == -1) {
    printf ("Erreur lors de l'accept : %d - %d", errno, ENOTSOCK);
    exit (-1);
  }
  else {
    printf ("Connexion réussie !");
  }

  do {
    pthread_create(&TID, NULL, Recept, &Socket);
    pthread_join(TID, &iExit);

  } while (*iExit == 0);

  shutdown(Socket, 2);

  return EXIT_SUCCESS;
}


Merci de vos réponses

Apprendre le VB6
dimanche 8 octobre 2006 à 20:59:02 | Re : Fin de recv

AlexN

Réponse acceptée !
T'as le même soucis que là :
http://www.cppfrance.com/infomsg_NANOSLEEP_811398.aspx

tu remplaces
printf ("Commande reçue : %s", commande);
par
printf ("Commande reçue : %s\n", commande);
ou par
printf ("Commande reçue : %s", commande);
fflush(stdout);
dimanche 8 octobre 2006 à 22:23:00 | Re : Fin de recv

Ziman

AH ben ui, virer le "\n".

Merci bien de votre réponse.

Apprendre le VB6
lundi 9 octobre 2006 à 01:19:15 | Re : Fin de recv

AlexN

Supprimer le \n ?
Nan nan, on s'est mal compris, faudrait le rajouter.
Mais bon c'est toi qui choises...


Cette discussion est classée dans : int, commande, include, socket, iexit


Répondre à ce message

Sujets en rapport avec ce message

Probleme reception sur un serveur windows en vc++ [ par alfred ] Salut a tous!!g un probleme dans mon serveur le recv renvoie la valeur -1 et je ne vois pas pouquoi, toute mes socket sont positives le client envois Serveur Vc++6 pb dans recv [ par alfred ] Salut a tousJ'ai un probleme dans mon serveur et je ne sais pas comment le resoudre. Le client se connecte bien et envoie le bon nombre de caracteres Erreur de segmentation d'un simple client http sous linux !! [ par nassimatique ] #include #include #include #include #include #include #include #define TAILLE 4096 <b socket trop lents [ par cid7777777 ] bonjour,jessaye de faire un jeu qui peu se jouera 2 en reseau local.je ne connais absolument rien en reso, mais en fouillant sur le net,  jai trouver fork et execvp [ par fullpirates ] Bon je vous explique j'ai un travail de mi-session à remettre pour mercredi et j'ai essayer bien comme mal a faire fonctionner la commande execvp ... 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 = 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 Erreur de Segmentation sur les sockets [ par andoid ] Bonjour Je blogue sur mon code depuis 2h j'ai une erreur de segmentation à la reception du coté client au faite j'envoie un tableau 2d (d=dimension) l communication serveur c et client java [ par andoid ] Bonjour Je voulais savoir commment on peut faire communiquer un serveur C et un cleint java avec les sockets voici juste un petit serveur qui dit bonj Undefined reference to... Incompréhensible. [ par AnTrqx ] Bonsoir, J'essaie de coder une classe AdvancedArray qui serait un genre de vecteur simplifié. Seulement j'obtiens cette erreur à la compilation. J'ai


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

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,827 sec (3)

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