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 sur linux


Sujet :

Réseau C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 174
    Points : 74
    Points
    74
    Par défaut socket sur linux
    Bonjour, je suis sur linux(debian sarge) et lorsque je met mes code socket (serveur et client) et que je les execute sur la meme machine, le serveur n'affiche pas "quelqu'un vient de se connecter" lorsque j'execute le client.

    code 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
     
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <unistd.h>
    #include <stdio.h>
    #include <stdlib.h> 
     
    #define INVALID_SOCKET -1
    #define SOCKET_ERROR -1
    #define closesocket(param) close(param)
     
    typedef int SOCKET;
    typedef struct sockaddr_in SOCKADDR_IN;
    typedef struct sockaddr SOCKADDR;
     
    int main()
    {
    SOCKET sock;
    sock=socket (AF_INET, SOCK_STREAM, 0);
    SOCKADDR_IN sin;
    sin.sin_addr.s_addr = htonl (INADDR_ANY);
    sin.sin_family = AF_INET;
    sin.sin_port = htons (23);
    bind (sock, (SOCKADDR *) &sin, sizeof sin);
    listen(sock, 5);
    int taille = (int) sizeof(sin);
    accept (sock, (SOCKADDR *) &sin, &taille);
    printf("quelqu'un vient de se conecter\n");
    closesocket(sock);
     
    return EXIT_SUCCESS;
    }
    code client
    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
     
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <unistd.h>
    #include <stdio.h>
    #include <stdlib.h> 
     
    #define INVALID_SOCKET -1
    #define SOCKET_ERROR -1
    #define closesocket(param) close(param)
     
    typedef int SOCKET;
    typedef struct sockaddr_in SOCKADDR_IN;
    typedef struct sockaddr SOCKADDR;
     
    int main()
    {
     
    SOCKET sock;
    sock=socket(AF_INET, SOCK_STREAM, 0);
    SOCKADDR_IN sin;
    sin.sin_addr.s_addr = inet_addr("127.0.0.1");
    sin.sin_family = AF_INET;
    sin.sin_port = htons (23);
    connect(sock, (SOCKADDR *)&sin, sizeof(sin));
    closesocket(sock);
    return EXIT_SUCCESS;
    }
    Pouvez vous m'aidez?? n'hesiter pas a me demandez plus de présision.

    merci d'avance

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par sebatlante Voir le message
    Bonjour, je suis sur linux(debian sarge) et lorsque je met mes code socket (serveur et client) et que je les execute sur la meme machine, le serveur n'affiche pas "quelqu'un vient de se connecter" lorsque j'execute le client.
    Pouvez vous m'aidez?? n'hesiter pas a me demandez plus de présision.
    Je viens de tester le serveur sous Windows comme ceci :
    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
     
    #ifdef WIN32
    #include <winsock2.h>
    #else
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <unistd.h>
    #define INVALID_SOCKET -1
    #define SOCKET_ERROR -1
    #define closesocket(param) close(param)
    typedef int SOCKET;
    typedef struct sockaddr_in SOCKADDR_IN;
    typedef struct sockaddr SOCKADDR;
    #endif
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main (void)
    {
       int ret;
     
    #if defined (WIN32)
       WSADATA wsa_data;
       int err = WSAStartup (MAKEWORD (2, 2), &wsa_data);
     
       if (!err)
       {
          puts ("WIN: winsock2: OK");
    #else
       int err;
    #endif
     
       SOCKET sock;
       sock = socket (AF_INET, SOCK_STREAM, 0);
       SOCKADDR_IN sin;
       sin.sin_addr.s_addr = htonl (INADDR_ANY);
       sin.sin_family = AF_INET;
       sin.sin_port = htons (23);
       bind (sock, (SOCKADDR *) & sin, sizeof sin);
       listen (sock, 5);
       int taille = (int) sizeof (sin);
       accept (sock, (SOCKADDR *) & sin, &taille);
       printf ("quelqu'un vient de se conecter\n");
       closesocket (sock);
     
    #if defined (WIN32)
       WSACleanup ();
    }
    #endif
     
    if (err)
    {
       ret = EXIT_FAILURE;
    }
    else
    {
       ret = EXIT_SUCCESS;
    }
     
    return ret;
    }
    avec le client Telnet de Windows, je n'ai pas de problèmes :

    http://delahaye.emmanuel.free.fr/images/server.png

    Aucun problème non plus avec le client...
    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
     
    #ifdef WIN32
    #include <winsock2.h>
    #else
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <unistd.h>
    #define INVALID_SOCKET -1
    #define SOCKET_ERROR -1
    #define closesocket(param) close(param)
    typedef int SOCKET;
    typedef struct sockaddr_in SOCKADDR_IN;
    typedef struct sockaddr SOCKADDR;
    #endif
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main (void)
    {
       int ret;
     
    #if defined (WIN32)
       WSADATA wsa_data;
       int err = WSAStartup (MAKEWORD (2, 2), &wsa_data);
     
       if (!err)
       {
          puts ("WIN: winsock2: OK");
    #else
       int err;
    #endif
     
       SOCKET sock;
       sock = socket (AF_INET, SOCK_STREAM, 0);
       SOCKADDR_IN sin;
       sin.sin_addr.s_addr = inet_addr ("127.0.0.1");
       sin.sin_family = AF_INET;
       sin.sin_port = htons (23);
       connect (sock, (SOCKADDR *) & sin, sizeof (sin));
       closesocket (sock);
     
    #if defined (WIN32)
       WSACleanup ();
    }
    #endif
     
    if (err)
    {
       ret = EXIT_FAILURE;
    }
    else
    {
       ret = EXIT_SUCCESS;
    }
     
    return ret;
    }
    http://delahaye.emmanuel.free.fr/images/client.png

    Sur ta machine, il y a peut être un firewall (iptables) qui empêche une connexion sur le port 23... Au fait tu es bien en root ? Sinon, pas de port < 1024, c'est la règle sur unixoïde...
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 174
    Points : 74
    Points
    74
    Par défaut
    salut!

    mon code fonctionne tres bien exactement comme il est sous windows (j'ai juste changer les include car ce n'est pas les meme sous win32)

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par sebatlante Voir le message
    mon code fonctionne tres bien exactement comme il est sous windows (j'ai juste changer les include car ce n'est pas les meme sous win32)
    Tu as bien lu tout mon post ?
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 174
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Tu as bien lu tout mon post ?
    non escuse j'ai pas lu la fin je vais verifier si je n'est pas de firewall installer avec synaptic et non je suis pas en root mais sa ne change rien au port 23 si ?
    je sais que tu va me repondre si mais je veux dire ya pas un moyen de changer sa?

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par sebatlante Voir le message
    non escuse j'ai pas lu la fin je vais verifier si je n'est pas de firewall installer avec synaptic et non je suis pas en root mais sa ne change rien au port 23 si ?
    je sais que tu va me repondre si mais je veux dire ya pas un moyen de changer sa?
    Je me répète : sous unixoïde (Unix, BSD, Linux, Mac OS/X etc.), si tu n'es pas en root, tu n'as pas accès aux ports 1 à 1023. C'est clair ? Mais tu peux choisir un autre port (64000, par exemple). Evidemment, il faut modifier le serveur et le client.
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 174
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Je me répète : sous unixoïde (Unix, BSD, Linux, Mac OS/X etc.), si tu n'es pas en root, tu n'as pas accès aux ports 1 à 1023. C'est clair ? Mais tu peux choisir un autre port (64000, par exemple). Evidemment, il faut modifier le serveur et le client.
    sa j'ai tres bien compris mais ce que je veux savoir c'est si il y a pas un moyen pour autorisez les port inferieur à 1023 pour pouvoir les utiliser quand on est pas en root.

    En plus dans ce que tu dis il y a quelque chose que je comprend pas:
    si les port < 1023 sont fermer si je ne suis pas en root, alors comment se fait t'il que je puisse acceder au web qui utilise le port 80 sans etre sur root?

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 174
    Points : 74
    Points
    74
    Par défaut
    en tout cas le probleme etait du au probleme des port donc je te remercie beaucoup pour ta réponse

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par sebatlante Voir le message
    sa j'ai tres bien compris mais ce que je veux savoir c'est si il y a pas un moyen pour autorisez les port inferieur à 1023 pour pouvoir les utiliser quand on est pas en root.
    Non. La sécurité en unixoïde, c'est sérieux, on ne transige pas avec ça.
    En plus dans ce que tu dis il y a quelque chose que je comprend pas:
    si les port < 1023 sont fermer si je ne suis pas en root, alors comment se fait t'il que je puisse acceder au web qui utilise le port 80 sans etre sur root?
    C'est l'application serveur qui doit être lancée en root. Tu as un serveur web sur ta machine ? Si c'est le cas, il a été lancé en mode root. Sinon, si tu parles d'un client web, il n'a pas besoin d'être lancé en root.
    Pas de Wi-Fi à la maison : CPL

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 174
    Points : 74
    Points
    74
    Par défaut
    ok je te remercie

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

Discussions similaires

  1. question sur socket.h linux
    Par doommick31 dans le forum Réseau
    Réponses: 8
    Dernier message: 25/05/2007, 08h11
  2. lancer OEM via le browser (10g sur linux)
    Par learn dans le forum Entreprise Manager
    Réponses: 6
    Dernier message: 20/09/2004, 17h04
  3. [analyse de syntaxe] pour C et C++ sur Linux
    Par Madmac dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 10/07/2004, 06h37
  4. les sockets sur != réseaux
    Par Hypnos dans le forum Développement
    Réponses: 2
    Dernier message: 02/03/2004, 09h45
  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