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 :

Problème de connexion à mon serveur distant. (Serveur java, client C/C++, sockets )


Sujet :

Réseau C

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Problème de connexion à mon serveur distant. (Serveur java, client C/C++, sockets )
    Bonjour,

    je cherche à me connecter à un serveur java distant avec un client c/c++ mais malheureusement je n'y arrive pas.
    Je précise que je suis sous vista avec visual C++ 2005.

    Voici mon code qui fonctionne en local ...

    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
     
    #include <winsock2.h>
    #include <stdio.h>
    #pragma comment(lib, "ws2_32.lib")
     
     
    void main()
    {
    WSADATA WSAData;
    WSAStartup(MAKEWORD(2,2), &WSAData);
    SOCKET sock;
    SOCKADDR_IN sin;
    char *buffer = "HELLO WORLD!\n";
     
    sock = socket(AF_INET, SOCK_STREAM, 0);
    sin.sin_addr.s_addr = inet_addr("*213.x.x.x*");
    sin.sin_family = AF_INET;
    sin.sin_port = htons(*N°PORT*);
    connect(sock, (SOCKADDR *)&sin, sizeof(sin));
    send(sock, buffer, strlen(buffer), 0);
    closesocket(sock);
    WSACleanup();
    }

    et mon serveur est un serveur qui marche pour d'autres choses déjà : il affiche simplement ce qu'il reçoit...

    Or là il n'attrappe même pas la connexion. Je me demande si le problème ne vient pas de vista qui empêche la connexion à distance...?

    Pouvez-vous m'aider svp ?

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sin.sin_addr.s_addr = inet_addr("*213.x.x.x*");
    sin.sin_port = htons(*N°PORT*);
    Je suppose que pour l'adresse IP et le numéro de port, tu n'a pas voulou nous les montrer.

    globalement, cela à l'air bon mais tu ne test aucun des retour de fonctions WSAStartup(), socket(), connect(), send(), closesocket(). Pourquoi, tu es faché avec. Pourtant je suis sûr que cela t'aiderai à comprendre ton problème (déjà savoir si c'est la création du socket, la connexion ou le send qui foirent, ce serait beau)
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    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 inemoune Voir le message
    je cherche à me connecter à un serveur java distant avec un client c/c++ mais malheureusement je n'y arrive pas.

    Voici mon code qui fonctionne en local ...

    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
     
    #include <winsock2.h>
    #include <stdio.h>
    #pragma comment(lib, "ws2_32.lib")
     
    void main()
    {
    WSADATA WSAData;
    WSAStartup(MAKEWORD(2,2), &WSAData);
    SOCKET sock;
    SOCKADDR_IN sin;
    char *buffer = "HELLO WORLD!\n";
     
    sock = socket(AF_INET, SOCK_STREAM, 0);
    sin.sin_addr.s_addr = inet_addr("*213.x.x.x*");
    sin.sin_family = AF_INET;
    sin.sin_port = htons(*N°PORT*);
    connect(sock, (SOCKADDR *)&sin, sizeof(sin));
    send(sock, buffer, strlen(buffer), 0);
    closesocket(sock);
    WSACleanup();
    }
    Citation Envoyé par Raoul Volfoni in "Les tontons flingueurs"
    - Faut reconnaître, c'est du brutal !
    Aucun test d'erreurs, tout peut arriver et on n'en saura rien...

    Je suggère 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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    #if defined (WIN32)
    #include <winsock2.h>
    #elif defined (linux)
    #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(s) close (s)
    typedef int SOCKET;
    typedef struct sockaddr_in SOCKADDR_IN;
    typedef struct sockaddr SOCKADDR;
    #endif
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    #define PORT 23
    #define IP "127.0.0.1"
     
    void client (void)
    {
       SOCKET sock= socket (AF_INET, SOCK_STREAM, 0);
       if (sock != INVALID_SOCKET)
       {
          int err;
          SOCKADDR_IN sin = {0};
          sin.sin_addr.s_addr = inet_addr (IP);
          sin.sin_family = AF_INET;
          sin.sin_port = htons (PORT);
          err = connect (sock, (SOCKADDR *) & sin, sizeof (sin));
          if (err != SOCKET_ERROR)
          {
             char *buffer = "HELLO WORLD !\n";
             err = send (sock, buffer, strlen (buffer), 0);
             if (err != SOCKET_ERROR)
             {
                printf ("%d byte%s sent\n", (int) err, err > 1 ? "s" : "");
             }
             else
             {
                printf ("ERR: send()\n");
             }
          }
          else
          {
             printf ("ERR: connect()\n");
          }
          closesocket (sock);
       }
       else
       {
          printf ("ERR: socket()\n");
       }
     
    }
     
    int main (void)
    {
    #if defined (WIN32)
       WSADATA WSAData;
       int erreur = WSAStartup (MAKEWORD (2, 0), &WSAData);
    #else
       int erreur = 0;
    #endif
       client ();
    #if defined (WIN32)
       WSACleanup ();
    #endif
       system ("pause");
     
       return 0;
    }
    et mon serveur est un serveur qui marche pour d'autres choses déjà : il affiche simplement ce qu'il reçoit...
    Donne l'IP et le port, on va pas le manger (ou par MP si c'est confidentiel).
    Pas de Wi-Fi à la maison : CPL

  4. #4
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    J'ai testé le code proposé mais j'ai des erreurs de linker ...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    1>00.obj : error LNK2019: unresolved external symbol __imp__closesocket@4 referenced in function "void __cdecl client(void)" (?client@@YAXXZ)
    1>00.obj : error LNK2019: unresolved external symbol __imp__send@16 referenced in function "void __cdecl client(void)" (?client@@YAXXZ)
    1>00.obj : error LNK2019: unresolved external symbol __imp__connect@12 referenced in function "void __cdecl client(void)" (?client@@YAXXZ)
    1>00.obj : error LNK2019: unresolved external symbol __imp__htons@4 referenced in function "void __cdecl client(void)" (?client@@YAXXZ)
    1>00.obj : error LNK2019: unresolved external symbol __imp__inet_addr@4 referenced in function "void __cdecl client(void)" (?client@@YAXXZ)
    1>00.obj : error LNK2019: unresolved external symbol __imp__socket@12 referenced in function "void __cdecl client(void)" (?client@@YAXXZ)
    1>00.obj : error LNK2019: unresolved external symbol __imp__WSACleanup@0 referenced in function _main
    1>00.obj : error LNK2019: unresolved external symbol __imp__WSAStartup@8 referenced in function _main
    1>C:\Users\jaboo\Documents\Visual Studio 2005\Projects\00\Debug\00.exe : fatal error LNK1120: 8 unresolved externals

    Testez svp si ce code marche chez vous avec :

    #define PORT 5000
    #define IP "213.251.181.107"

    Logiquement je verrai les résultats s'afficher sur mon serveur. Il est lancé vous pouvez tester.

    Merci

  5. #5
    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 inemoune Voir le message
    J'ai testé le code proposé mais j'ai des erreurs de linker ...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    1>00.obj : error LNK2019: unresolved external symbol __imp__closesocket@4 referenced in function "void __cdecl client(void)" (?client@@YAXXZ)
    1>00.obj : error LNK2019: unresolved external symbol __imp__send@16 referenced in function "void __cdecl client(void)" (?client@@YAXXZ)
    1>00.obj : error LNK2019: unresolved external symbol __imp__connect@12 referenced in function "void __cdecl client(void)" (?client@@YAXXZ)
    1>00.obj : error LNK2019: unresolved external symbol __imp__htons@4 referenced in function "void __cdecl client(void)" (?client@@YAXXZ)
    1>00.obj : error LNK2019: unresolved external symbol __imp__inet_addr@4 referenced in function "void __cdecl client(void)" (?client@@YAXXZ)
    1>00.obj : error LNK2019: unresolved external symbol __imp__socket@12 referenced in function "void __cdecl client(void)" (?client@@YAXXZ)
    1>00.obj : error LNK2019: unresolved external symbol __imp__WSACleanup@0 referenced in function _main
    1>00.obj : error LNK2019: unresolved external symbol __imp__WSAStartup@8 referenced in function _main
    1>C:\Users\jaboo\Documents\Visual Studio 2005\Projects\00\Debug\00.exe : fatal error LNK1120: 8 unresolved externals
    Oui, bien sûr, il faut ajouter la bibliothèque ws2_32 au projet.

    Attention, tu compiles en C++ et non en C. L'extension du source doit être .c et non .cpp ni .C.
    Testez svp si ce code marche chez vous avec :

    #define PORT 5000
    #define IP "213.251.181.107"

    Logiquement je verrai les résultats s'afficher sur mon serveur. Il est lancé vous pouvez tester.
    J'y vais... Fait.

    Aucun problème d'ici. Tu as reçu mon message ?
    Pas de Wi-Fi à la maison : CPL

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Tu dois lier ton projet à la bibliothèque ws2_32.lib.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    C'est bon je n'ai plus d'erreur maintenant mais la console se lance et puis

    ERR : connect()



    Je me dis que c'est peut-être à cause du réseau parce que je ne vois pas ce que ça peut être d'autre - réseau de l'université

    Est-ce possible ?

  8. #8
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par inemoune Voir le message
    ERR : connect()
    Je me dis que c'est peut-être à cause du réseau parce que je ne vois pas ce que ça peut être d'autre - réseau de l'université

    Est-ce possible ?
    Est ce qu'il est possible qu'il y ait un équipement de filtrage entre ton client et ton serveur ?
    Si oui, cela peut être une des causes de ton problème.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  9. #9
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Oui, bien sûr, il faut ajouter la bibliothèque ws2_32 au projet.

    Attention, tu compiles en C++ et non en C. L'extension du source doit être .c et non .cpp ni .C.

    J'y vais... Fait.

    Aucun problème d'ici. Tu as reçu mon message ?


    J'ai pas reçu ton message, mon serveur est toujours en attente de connexion ... c'est bizarre ^o)

    Tu peux réessayer vit'fait stp ?

  10. #10
    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 inemoune Voir le message
    C'est bon je n'ai plus d'erreur maintenant mais la console se lance et puis

    ERR : connect()



    Je me dis que c'est peut-être à cause du réseau parce que je ne vois pas ce que ça peut être d'autre - réseau de l'université

    Est-ce possible ?
    Il est fort probable que tu n'ai le droit de te connecter que sur des ports autorisés comme 80 (http) ou 23 (Telnet) etc.

    Soit tu demandes une autorisation spéciale à l'admin, réservé à cette IP précise, soit tu testes en local. Tu peux aussi essayer un port plus 'standard'. Si il est < 1024 le serveur doit être lancé en root si c'est une machine unixoïde. (danger...)
    Pas de Wi-Fi à la maison : CPL

  11. #11
    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 inemoune Voir le message
    J'ai pas reçu ton message, mon serveur est toujours en attente de connexion ... c'est bizarre ^o)

    Tu peux réessayer vit'fait stp ?
    Il doit être buggé ou arrété, car maintenant, j'ai une erreur de connection. Tu as Skype et un micro casque ? (mais si ton réseau filtre méchamment, ça ne fonctionnera pas..)
    Pas de Wi-Fi à la maison : CPL

  12. #12
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Il doit être buggé ou arrété, car maintenant, j'ai une erreur de connection. Tu as Skype ?
    je viens de le relancer.

    Non je n'ai pas skype, par contre je me rends compte que je ne peux pas accéder à MSN messenger (c'est pas une référence mais bon...) ni à certains jeux comme Europoker... C'est peut-être parce qu'effectivement certains ports sont fermés...

    Je teste en local ça fonctionne... j'essaierai sur le serveur distant à partir d'un autre réseau

    Si certains veulent tenter, le serveur est relancé...

    Merci.

  13. #13
    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 inemoune Voir le message
    Si certains veulent tenter, le serveur est relancé...
    C'est bon pour moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    70 bytes sent
    Appuyez sur une touche pour continuer...
    J'ai peut être fait explosé le serveur avec une trame trop longue... Montre ton code.
    Pas de Wi-Fi à la maison : CPL

  14. #14
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    C'est bon pour moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    70 bytes sent
    Appuyez sur une touche pour continuer...
    J'ai peut être fait explosé le serveur avec une trame trop longue... Montre ton code.
    Voilà.... ça ça me plait :d

    Non j'ai de la marge coté serveur t'inquiète

    70 octets ça doit faire ça (plus le caractère de fin ) : HELLO WORLD ! by Emmanuel Delahaye du Cafe Colombus rue Vavin Paris 6

    Merci Emmanuel, je suis soulagé.

    Je vais pouvoir continuer mon dev en local plus sereinement.

    10 000 mercis !!

  15. #15
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Je suggère 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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    #if defined (WIN32)
    #include <winsock2.h>
    #elif defined (linux)
    #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(s) close (s)
    typedef int SOCKET;
    typedef struct sockaddr_in SOCKADDR_IN;
    typedef struct sockaddr SOCKADDR;
    #endif
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    #define PORT 23
    #define IP "127.0.0.1"
     
    void client (void)
    {
       SOCKET sock= socket (AF_INET, SOCK_STREAM, 0);
       if (sock != INVALID_SOCKET)
       {
          int err;
          SOCKADDR_IN sin = {0};
          sin.sin_addr.s_addr = inet_addr (IP);
          sin.sin_family = AF_INET;
          sin.sin_port = htons (PORT);
          err = connect (sock, (SOCKADDR *) & sin, sizeof (sin));
          if (err != SOCKET_ERROR)
          {
             char *buffer = "HELLO WORLD !\n";
             err = send (sock, buffer, strlen (buffer), 0);
             if (err != SOCKET_ERROR)
             {
                printf ("%d byte%s sent\n", (int) err, err > 1 ? "s" : "");
             }
             else
             {
                printf ("ERR: send()\n");
             }
          }
          else
          {
             printf ("ERR: connect()\n");
          }
          closesocket (sock);
       }
       else
       {
          printf ("ERR: socket()\n");
       }
     
    }
     
    int main (void)
    {
    #if defined (WIN32)
       WSADATA WSAData;
       int erreur = WSAStartup (MAKEWORD (2, 0), &WSAData);
    #else
       int erreur = 0;
    #endif
       client ();
    #if defined (WIN32)
       WSACleanup ();
    #endif
       system ("pause");
     
       return 0;
    }
    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
    #if defined (WIN32)
    # include <winsock2.h>
    # ifdef _MSC_VER
    #  pragma comment(lib, "ws2_32.lib")
    # endif
    #elif defined (linux)
    # 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(s) close (s)
    typedef int SOCKET;
    typedef struct sockaddr_in SOCKADDR_IN;
    typedef struct sockaddr SOCKADDR;
    #endif
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    #define PORT 23
    #define IP "127.0.0.1"
     
    void client (void);
     
    void client (void)
    {
       SOCKET sock = socket (PF_INET, SOCK_STREAM, 0);
       if (sock != INVALID_SOCKET)
       {
          int err;
          SOCKADDR_IN sin = {0};
          sin.sin_addr.s_addr = inet_addr (IP);
          sin.sin_family = AF_INET;
          sin.sin_port = htons (PORT);
     
          err = connect (sock, (SOCKADDR *) & sin, sizeof (sin));
          if (err != SOCKET_ERROR)
          {
             char const *buffer = "HELLO WORLD !\n";
     
             err = send (sock, buffer, strlen (buffer), 0);
             if (err != SOCKET_ERROR)
             {
                printf ("%d byte%s sent\n", err, err > 1 ? "s" : "");
             }
             else
             {
                puts ("ERR: send()");
             }
          }
          else
          {
             puts ("ERR: connect()");
          }
          closesocket (sock);
       }
       else
       {
          puts ("ERR: socket()");
       } 
    }
     
    int main (void)
    {
    #if defined (WIN32)
       WSADATA WSAData;
       int erreur = WSAStartup (MAKEWORD (2, 0), &WSAData);
       if (erreur != 0)
       {
    #endif
       client ();
    #if defined (WIN32)
          WSACleanup ();
       }
       else
       {
          /** see GetLastError() */
       }
    #endif
       getchar (); 
       return 0;
    }
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  16. #16
    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 nicolas.sitbon Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #if defined (WIN32)
    # include <winsock2.h>
    # ifdef _MSC_VER
    #  pragma comment(lib, "ws2_32.lib")
    # endif
    Je préfère éviter les exotismes quand c'est possible. C'est pas difficile d'ajouter une bibliothèque au projet...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void client (void);
     
    void client (void)
    {
    Redondance non justifiée ici. Si le compilateur râle, définir la fonction en static (logique, elle n'est pas exportée, elle n'a pas besoin de prototype séparé).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    static void client (void)
    {
    Pas de Wi-Fi à la maison : CPL

  17. #17
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Je préfère éviter les exotismes quand c'est possible. C'est pas difficile d'ajouter une bibliothèque au projet...
    ça ne me dérange tant que c'est dans un #ifdef.
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Redondance. Si le compilateur râle, définr la fonction en static (logique, elle n'est pas exportée, elle n'a pas besoin de prototype séparé).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    static void client (void)
    {
    100% d'accord!
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

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

Discussions similaires

  1. Problème Connexion lecteur reseau sur serveur distant
    Par Nox1669 dans le forum Administration
    Réponses: 7
    Dernier message: 19/05/2015, 15h28
  2. Réponses: 1
    Dernier message: 28/02/2011, 11h06
  3. Problème de connexion à un hôte distant avec Java RMI
    Par Invité dans le forum Sécurité
    Réponses: 4
    Dernier message: 04/01/2011, 01h46
  4. connexion à partir d'un serveur distant
    Par peppena dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 16/07/2010, 10h50
  5. Réponses: 1
    Dernier message: 22/07/2008, 20h12

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