IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau C Discussion :

Bessoins d'aide pour les socket


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8
    Par défaut Bessoins d'aide pour les socket
    voila 'ai coder un petit serveur vite fait qui permet d'accepter un client et il peut discuter avec celui ci.

    mais mon petit problème, c'est quand la console du client est fermer, le serveur part en boucle infini, ce qui est assez gênant.

    voici le code du serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    	/*
    	** Auteur : Talus
    	** Description : Simple Serveur
    	** Notes d'auteur :
    	** Journal :
    	*/
     
    #include <winsock2.h>
    #include <stdio.h>
    #include <stdlib.h>
     
    #define PORT 4444
    #define BUFF_SIZE 1024
     
    int main(void)
    {
     
    	WSADATA WSAData;
    	WSAStartup(MAKEWORD(2,0), &WSAData);
     
    	SOCKET sock;
    	SOCKET csock;
    	SOCKADDR_IN sin;
    	SOCKADDR_IN csin;
    	char buffer[BUFF_SIZE];
    	int sin_size;
     
    	sin.sin_addr.s_addr = htonl(INADDR_ANY);
    	sin.sin_family      = AF_INET;
    	sin.sin_port        = htons(PORT);
    	sock = socket(AF_INET,SOCK_STREAM,0);
    	bind(sock, (SOCKADDR *)&sin, sizeof(sin));
     
    	listen(sock, 0);
     
    	sin_size = sizeof(csin);
    	csock = accept(sock, (SOCKADDR *)&csin, &sin_size);
    	printf("%d connected \n", sock);
     
    	while((recv(csock, buffer, sizeof(buffer), 0)))
    		{
    			printf("%d : %s", sock, buffer);
    			send(csock, "recu", 4, 0);
    			memset(buffer, 0, sizeof(buffer));
    		}
      return (0);
    }
    je tente aussi de le rendre multi client, mais la je bloque totalement

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Une fois la socket cliente fermée, recv va retourner un code d'erreur négatif.

    Pour sortir de la boucle à ce moment là, il suffit de modifier la condition de la boucle while :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while(recv(csock, buffer, sizeof(buffer), 0) > 0) {
        printf("%d : %s", sock, buffer);
        send(csock, "recu", 4, 0);
        memset(buffer, 0, sizeof(buffer));
    }

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8
    Par défaut
    Citation Envoyé par mabu Voir le message
    Bonjour,

    Une fois la socket cliente fermée, recv va retourner un code d'erreur négatif.

    Pour sortir de la boucle à ce moment là, il suffit de modifier la condition de la boucle while :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while(recv(csock, buffer, sizeof(buffer), 0) > 0) {
        printf("%d : %s", sock, buffer);
        send(csock, "recu", 4, 0);
        memset(buffer, 0, sizeof(buffer));
    }
    nikel ca marche
    et tu pourrai m'aider pour le passer en multi client ?

    a si j'ai un autre problème lorsque je transmet une chaine de caractère avec des espace le serveur les affiche les une sous les autre comme si il y avait un \n entre chaque mot , ca peut venir d'ou ?

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par [R3D]Talus Voir le message
    et tu pourrai m'aider pour le passer en multi client ?
    Un très bon tutoriel pour ça : http://broux.developpez.com/articles/c/sockets/

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8
    Par défaut
    thx
    je vais me jeter dessus

Discussions similaires

  1. [debutant] aide pour les sockets en C
    Par Shark9 dans le forum Réseau
    Réponses: 6
    Dernier message: 26/06/2010, 20h55
  2. Aide pour les sockets svp
    Par sabiha93 dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 03/02/2008, 08h43
  3. [Kylix] Aide por les sockets
    Par nabs dans le forum EDI
    Réponses: 1
    Dernier message: 03/04/2004, 12h35
  4. [Kylix] cherche composants pour les sockets
    Par coriolis dans le forum EDI
    Réponses: 1
    Dernier message: 09/04/2003, 10h18
  5. Une petite aide pour les API ?
    Par Yop dans le forum Windows
    Réponses: 2
    Dernier message: 04/04/2002, 21h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo