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 :

Serveur problème sockets


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Homme Profil pro
    Étudiant Réseaux et Télécoms
    Inscrit en
    Octobre 2009
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant Réseaux et Télécoms
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2009
    Messages : 121
    Par défaut Serveur problème sockets
    HelllOOoooO!

    Voilou, j'ai un gros problème.

    J'arrive a faire un serveur qui lorsque qu'un client se connecte, lui envoie un message.

    Mais je n'arrive pas à ce que, une fois le premier client connecté, il attend le second client avant d'envoyer ses données.

    J'ai essayé pleins de codes différents sans réussite.

    La fonction accept n'est pas bloquante?


    Voici un des codes:

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    #include <winsock2.h>
        typedef int socklen_t;
     
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <errno.h>
     
    #define PORT 23
     
     
     
    int main(void)
    {
     
            WSADATA WSAData;
            int erreur = WSAStartup(MAKEWORD(2,2), &WSAData);
            int continuer=1;
            int i;
     
     
        SOCKET sock0;
        SOCKET sock1;
     
        SOCKADDR_IN sin0;
        SOCKADDR_IN sin1;
     
     
     
        SOCKADDR_IN csin0;
        SOCKADDR_IN csin1;
     
        int recsize0 = sizeof sin0;
        int recsize1 = sizeof sin1;
        char prenom1[20]="Nico";
     
        char prenom2[20]="Alban";
     
        int sock_err;
     
     
            sock0 = socket(AF_INET, SOCK_STREAM, 0);
     
     
     
                printf("La socket %d est maintenant ouverte en mode TCP/IP\n", sock0);
                printf("La socket %d est maintenant ouverte en mode TCP/IP\n", sock1);
     
                sin0.sin_addr.s_addr = htonl(INADDR_ANY);
                sin0.sin_family = AF_INET;
                sin0.sin_port = htons(PORT);
     
                sin1.sin_addr.s_addr = htonl(INADDR_ANY);
                sin1.sin_family = AF_INET;
                sin1.sin_port = htons(PORT);
     
     
                bind(sock0, (SOCKADDR*) &sin0, recsize0);
     
     
     
                    listen(sock0, 5);
     
                      int crecsize0 = sizeof csin0;
     
                    SOCKET csock0 = accept(sock0, (SOCKADDR *) &csin0, &crecsize0);
     
     
     
     
                    bind(sock1, (SOCKADDR*) &sin1, recsize1);
                    listen(sock1, 5);
     
                    int crecsize1 = sizeof csin1;
                    SOCKET csock1 = accept(sock1, (SOCKADDR *) &csin1, &crecsize1);
     
     
     
     
     
                        while(1)
                        {
     
     
                               send(csock0, prenom1, sizeof(prenom1), 0);
                               send(csock1, prenom2, sizeof(prenom2), 0);
     
     
                                closesocket(csock0);
                                closesocket(csock1);
     
     
                            }
     
     
            WSACleanup();
     
     
        return EXIT_SUCCESS;
    }

  2. #2
    Membre Expert Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Par défaut
    salut,

    oui, accept est bloquant.

    pour gérer, plusieurs clients, tu as 2 possibilités :
    - multi-thread : par exemple : la fonction accept, dans le main, et la gestion de comm avec le client dans un thread (autant de threads que de clients)
    - utiliser la fonction select.

    tu trouveras pas mal d'exemples sur la gestion multi clients.

  3. #3
    Membre confirmé

    Homme Profil pro
    Étudiant Réseaux et Télécoms
    Inscrit en
    Octobre 2009
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant Réseaux et Télécoms
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2009
    Messages : 121
    Par défaut
    Bonjour et merci d'avoir répondu,

    Vous m'avez dit que la fonction accept est bloquante, donc pourquoi mon programme ne fonctionne point.

    Cordialement

  4. #4
    Membre Expert Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Par défaut
    oui tant que tu n'as pas 2 clients, ton programmes est bloqué.
    regardes ce cours, ca va t'aider.

  5. #5
    Membre confirmé

    Homme Profil pro
    Étudiant Réseaux et Télécoms
    Inscrit en
    Octobre 2009
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant Réseaux et Télécoms
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2009
    Messages : 121
    Par défaut
    Citation Envoyé par fregolo52 Voir le message
    oui tant que tu n'as pas 2 clients, ton programmes est bloqué.
    regardes ce cours, ca va t'aider.
    Oui,mais dans mon programme celà ne bloque pas, et je ne vois pas pourquoi!

  6. #6
    Membre confirmé

    Homme Profil pro
    Étudiant Réseaux et Télécoms
    Inscrit en
    Octobre 2009
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant Réseaux et Télécoms
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2009
    Messages : 121
    Par défaut
    Je up

    Cordialement!

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 24
    Par défaut
    Citation Envoyé par TWEESTY Voir le message
    Oui,mais dans mon programme celà ne bloque pas, et je ne vois pas pourquoi!
    Salut,

    tu bind deux sockets différentes sur le même port. Ton second bind devrait te renvoyer un code d'erreur, donc les listen et accept suivant échouent aussi.

    Pour résoudre ton problème 2 solutions :
    - changer le port d'écoute de ta deuxième socket
    - coder un vrai serveur multi-clients et je te renvoie aux postes de fregolo52

    En espérant t'avoir aidé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème Socket Java architecture Client Serveur
    Par Jonny-1600 dans le forum Langage
    Réponses: 4
    Dernier message: 30/11/2012, 20h50
  2. [Débutant] Problème socket serveur (attente du client)
    Par synolog dans le forum C#
    Réponses: 14
    Dernier message: 20/10/2011, 18h16
  3. Problème Socket Client/serveur
    Par jasmina1 dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 21/12/2010, 16h59
  4. Problème C#, dll en C et serveur de sockets
    Par themus dans le forum C#
    Réponses: 4
    Dernier message: 15/07/2010, 10h42
  5. problème socket serveur.
    Par deck_bsd dans le forum Réseau
    Réponses: 2
    Dernier message: 13/12/2006, 19h33

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