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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 174
    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
    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 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...

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 174
    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
    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 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 ?

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 174
    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
    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 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.

+ 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