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 :

Socket : pb avec le port


Sujet :

Réseau C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 110
    Par défaut Socket : pb avec le port
    Bonjour tout le monde,

    Voila je voudrais créer un petit programme (client et serveur) qui permetrait de lire le contenu d'un dossier sur un ordi et d'envoyer ce contenu sur un autre ordi qui est sur le même réseau local.
    Pour l'instant j'en suis qu'au début, je voudrais simplement créer le socket et l'ouvrir mais j'ai un petit problème. En effet si je choisi le port 80 j'ai le message "putain ça marche pas" qui s'affiche et si je change le port alors le accept() ne se fait même pas (je n'ai rien qui s'affiche).

    Déja est-ce que je suis sur la bonne piste pour faire ce que je veux faire? ou alors est-ce que je dois carrément m'y prendre autrement? Et si c'est la bonne piste pourquoi est-ce que j'ai cette erreur?

    mon code :
    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
     
    void main()
    {    
     
        int tmp_taille;
     
     
        //initialisation
        WSADATA WSAData;
        WSAStartup(MAKEWORD(2,0), &WSAData);
     
     
        SOCKET sock;
        SOCKADDR_IN sin; //création de la structure qui contient les informations technique du socket
        sin.sin_addr.s_addr            = INADDR_ANY;   //définition de l'adresse du serveur
        sin.sin_family                = AF_INET;        //famille du cocket
        sin.sin_port                = htons(80);    //définition du port
        sock = socket(AF_INET,SOCK_STREAM,0);        //création du socket
        bind(sock, (SOCKADDR *)&sin, sizeof(sin));  //atache le socket à l'adresse et au port défnini avant
     
        //maintenant sachant que nous sommes dans un serveur, il faut que le serveur écoute
        listen(sock, 5);  //écoute le port sur le socket
        int val = 0;
        while(1)
        {
            //on met la taille la parce que sinon ca marche pas quand on met en direct dans le accept
            tmp_taille = sizeof(sin);
            val = accept(sock, (SOCKADDR *)&sin, &tmp_taille);
            if(val != INVALID_SOCKET)
            {
            // Fonctions à éxécuter sur le socket.
                printf("yyyhhhhaaaaaa le socket fonctione \n");
            }
            else
                printf("putain ca marche pas\n");
     
        }
    }
    Merci d'avance

  2. #2
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Le port 80 est utilisé par le navigateur internet, c'est le port HTTP.

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par ooyeah
    Voila je voudrais créer un petit programme (client et serveur) qui permetrait de lire le contenu d'un dossier sur un ordi et d'envoyer ce contenu sur un autre ordi qui est sur le même réseau local.
    Pour l'instant j'en suis qu'au début, je voudrais simplement créer le socket et l'ouvrir mais j'ai un petit problème. En effet si je choisi le port 80 j'ai le message "putain ça marche pas" qui s'affiche et si je change le port alors le accept() ne se fait même pas (je n'ai rien qui s'affiche).
    Le port 80 est reservé à HTTP (serveur 'web'). Tu es sûr que tu veux faire ça ?

    Pour développer une application client serveur, le mieux est de développer un client avec un serveur connu ou l'inverse. Il est délicat de développer les deux en même temps...

    Tu disposes probablement d'un client Telnet sur ta machine. C'est un simple terminal connecté à TCP/IP. Il est simple de développer un mini serveur telnet (ecoute du port 23) qui renvoi tout ce qu'on lui dit...

    Au fait, tout ceci n'a rien à voir avec le langage C... Le bon forum est Développement réseaux

    Ton code recommenté (et mis en en ordre...)
    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
     
    #include <winsock2.h>
    #include <stdio.h>
     
    int main()
    {
       /* initialisation (Windows only) */
       WSADATA WSAData;
       WSAStartup(MAKEWORD(2, 0), &WSAData);
     
       /* creation du socket en mode IP connecte (TCP) */
       SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);
     
       /* creation de la structure qui contient les informations technique du socket */
       SOCKADDR_IN sin;
     
       /* accepte n'importe quelle adresse de client */
       sin.sin_addr.s_addr = INADDR_ANY;
     
       /* protocole : IP */
       sin.sin_family = AF_INET;
     
       /* definition du port ecoute' */
       sin.sin_port = htons(23);
     
       /* attache le socket à l'adresse et au port défnini avant */
       bind(sock, (SOCKADDR *)&sin, sizeof(sin));
     
       /* accepte jusqu'à 5 connexions simultanees. */
       listen(sock, 5);
     
       /* boucle des connexions */
       while (1)
       {
          size_t tmp_taille = sizeof(sin);
          /* attend le client... */
          SOCKET csock = accept(sock, (SOCKADDR *) & sin, &tmp_taille);
          if (csock != INVALID_SOCKET)
          {
             /* Fonctions a executer sur le socket. 
             
             ici, on devrait creer un thread par nouveau client... 
             On lui passe le socket et il se debrouille avec...
             
             */
             printf("Client connected on socket %d\n", val);
          }
          else
          {
             printf("Connexion error\n");
          }
       }
     
       WSACleanup ();
     
       return 0;
    }
    Lance ce serveur, puis lance plusieurs sessions Telnet locale (127.0.0.1) et verras les numeros de sockets apparaitre...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 110
    Par défaut
    Autant pour moi, j'avais mal posé ma question et en plus c'était évident que rien ne s'affichai après le accept dans le mesure où je ne lancait pas le client qui demande une connection donc forcément pas d'acceptation

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

Discussions similaires

  1. [Débutant] utiliser des sockets avec le port 23
    Par nour_dhaouadi dans le forum C#
    Réponses: 1
    Dernier message: 14/04/2013, 05h06
  2. Problème avec le port série sous Windows XP
    Par didou2dek dans le forum Composants VCL
    Réponses: 6
    Dernier message: 02/09/2003, 19h50
  3. socket : problème avec GetHostByName
    Par SteelBox dans le forum Réseau
    Réponses: 25
    Dernier message: 19/08/2003, 13h49
  4. App Socket Raw avec VC++6
    Par Martin Soucy dans le forum Développement
    Réponses: 3
    Dernier message: 04/12/2002, 05h07
  5. nombre de socket sur un meme port ?
    Par ginnovy dans le forum Développement
    Réponses: 3
    Dernier message: 25/10/2002, 10h52

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