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

C Discussion :

probleme avec socket


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 10
    Points : 8
    Points
    8
    Par défaut probleme avec socket
    Bonjour,

    Je me suis lancer dans le tutoriel sur les socket.
    J arrive a effectuer la connexion lorsque j execute le serveur et le client sur mon pc.Mais lorsque j essaye de lancer mon client sur le pc de mon pere (qui est en reseau avec le mien),la connexion ne s effectue pas!
    (Je precise que suis sous xp et le pc de mon pere est sous vista )
    Voici mon code :

    Serveur:
    Code : C

    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
     
    #include <winsock2.h>
    #include <stdio.h>
    #include <stdlib.h>
    #define PORT 23
     
    typedef int socklen_t;
     
    int main(void)
    {
     
        WSADATA WSAData;
        int erreur = WSAStartup(MAKEWORD(2,2), &WSAData);
     
     
        /* Socket et contexte d'adressage du serveur */
        SOCKADDR_IN sin;
        SOCKET sock;
        socklen_t recsize = sizeof(sin);
     
        /* Socket et contexte d'adressage du client */
        SOCKADDR_IN csin;
        SOCKET csock;
        socklen_t crecsize = sizeof(csin);
     
        int sock_err;
     
     
        if(!erreur)
        {
            /* Création d'une socket */
            sock = socket(AF_INET, SOCK_STREAM, 0);
     
            /* Si la socket est valide */
            if(sock != INVALID_SOCKET)
            {
                printf("La socket %d est maintenant ouverte en mode TCP/IP\n", sock);
     
                /* Configuration */
                sin.sin_addr.s_addr = htonl(INADDR_ANY);  /* Adresse IP automatique */
                sin.sin_family = AF_INET;                 /* Protocole familial (IP) */
                sin.sin_port = htons(PORT);               /* Listage du port */
                sock_err = bind(sock, (SOCKADDR*)&sin, recsize);
     
                /* Si la socket fonctionne */
                if(sock_err != SOCKET_ERROR)
                {
                    /* Démarrage du listage (mode server) */
                    sock_err = listen(sock, 5);
                    printf("Listage du port %d...\n", PORT);
     
                    /* Si la socket fonctionne */
                    if(sock_err != SOCKET_ERROR)
                    {
                        /* Attente pendant laquelle le client se connecte */
                        printf("Patientez pendant que le client se connecte sur le port %d...\n", PORT);
                        csock = accept(sock, (SOCKADDR*)&csin, &crecsize);
                        printf("Un client se connecte avec la socket %d de %s:%d\n", csock, inet_ntoa(csin.sin_addr), htons(csin.sin_port));
                    }
                    else
                        perror("listen");
                }
                else
                    perror("bind");
     
                /* Fermeture de la socket client et de la socket serveur */
                printf("Fermeture de la socket client\n");
                closesocket(csock);
                printf("Fermeture de la socket serveur\n");
                closesocket(sock);
                printf("Fermeture du serveur terminée\n");
            }
            else
                perror("socket");
     
                WSACleanup();
     
        }
     
        return EXIT_SUCCESS;
    }
    Et mon client:
    Code : C
    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
     
    #include <stdio.h>    // printf
    #include <conio.h>    // getch()
    #include <winsock2.h>
    #define PORT 23
     
    void main()
    {
    	WSADATA WSAData;
    	WSAStartup(MAKEWORD(2,0), &WSAData);
     
    	SOCKET sock;
    	SOCKADDR_IN sin;
    	char buffer[255];
     
    	sock = socket(AF_INET, SOCK_STREAM, 0);
     
    	sin.sin_addr.s_addr = inet_addr("127.0.0.1");
    	sin.sin_family	    = AF_INET;
    	sin.sin_port	    = htons(PORT);
     
    	connect(sock, (SOCKADDR *)&sin, sizeof(sin));
       	memset(buffer,0,255);
    	recv(sock, buffer, sizeof(buffer), 0);
       	printf("%s",buffer);
       	getch();
    	closesocket(sock);
    	WSACleanup();
    }
    Merci.

  2. #2
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Si 192.168.1.1 est l'adresse IP de ton PC, celui qui fait tourner le serveur, alors tu dois mettre 192.168.1.1 dans sin.sin_addr.s_addr, pas 127.0.0.1. En réseau, 127.0.0.1 signifie "moi-même". Si tu ne sais pas comment connaître l'adresse IP d'une machine, ou comment lui en donner une nouvelle, pose la question dans le forum dédié au système que tu utilises. perror avec les sockets sous Windows ne sert à rien. L'utiliser pour tenter d'afficher la cause d'une erreur rencontrée par une fonction de Winsock est un bug.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Merci pour ces conseils,(Pour les perror je le savais ce n est pas mon code juste un code que j ai copier pour simplifier mon probleme)maintenant j ai compris mon problème d ip.
    Par contre y a une question qui me vient en tête,si je veut faire une application qui passe par le net ,devrais je devoir indiquer aussi mon ip au client comme c est le cas ici?

  4. #4
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Fondamentalement oui, mais c'est plus pratique de t'enregistrer sur le web pour obtenir un nom plus simple à retenir comme ben83510.com ou www.ben83510.com. Connaissant le nom de ta machine, les utilisateurs peuvent la traduire en adresse IP (s'ils sont eux aussi connectés bien sûr ...) à l'aide de la fonction gethostbyname, démonstration ici.

Discussions similaires

  1. [C] Probleme avec socket client-serveur TCP
    Par LinuxUser dans le forum Réseau
    Réponses: 33
    Dernier message: 15/05/2007, 22h26
  2. [C/C++] probleme avec socket
    Par Zenryl dans le forum C++
    Réponses: 6
    Dernier message: 09/03/2007, 17h09
  3. Perl probleme avec socket et Get
    Par killuaster dans le forum Programmation et administration système
    Réponses: 9
    Dernier message: 11/10/2006, 21h27
  4. [socket] Probleme avec connect
    Par sorry60 dans le forum Réseau
    Réponses: 12
    Dernier message: 16/11/2005, 22h01
  5. Probleme avec des socket !
    Par Ptimath44 dans le forum Réseau
    Réponses: 11
    Dernier message: 31/10/2005, 18h11

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