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 Socket en TCP


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 8
    Par défaut Problème de connexion Socket en TCP
    Bonsoir à tous,

    J'ai un petit problème de connexion de socket, et a cause de ca je ne peux envoyer de message à mon logiciel, je vous explique tout d'abords mon Projet:

    Mon Projet est de créer un boitier qui fait office de télécommande pour contrôler un logiciel vidéo.
    Donc j'ai choisi d'utiliser un PIC 16F877 que j'intègrerai dans mon boitier quand j'aurais fini mon programme en C avec le protocole TCP car ce pic en programmable en C.
    Mais problème commence sur le socket, j'ai déjà fais une recherche pour le créer ce qui est fait.

    Maintenant je n'arrive pas me connecter au socket et à envoyer mon message qui est "halt" ce qui permet de stopper la Timeline du logiciel.

    voici mon début de programme:

    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
    #include "stdafx.h"
    #include <stdio.h> 
    #include <winsock2.h>
    #pragma comment(lib, "ws2_32.lib")
     
     
     
    int main()
    {
    	//Initialisation de la fonction WSAStartup,
    	//qui permet d'utiliser le fichier Winsock.DLL par un processus 
        WSADATA WSAData;
    	//"MAKEWORD(2,0)" = Indique la version de winsock que j'utilise qui est donc winsock2.
       int iResult = WSAStartup(MAKEWORD(2,0), &WSAData); 
       if (iResult != NO_ERROR) //Si iResult est différent de "NO_ERROR" continuer, sinon Afficher "Error at WSAStartup()"
       {printf("Error at WSAStartup()\n");}// Affiche "Error at WSAStartup()" au cas d'une erreur
       else 
       {printf("WSAStartup()is OK\n");
    	} 
       /* ... */
        //WSACleanup(); //Nettoyage du WSA 
     
    	///////////////////////////////Création du socket///////////////////////////////
     
    	SOCKET socketClient; //Définition du socket. sock est une variable de type SOCKET.
    	socketClient = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); //SOCK_STREAM = Utilisation du protocole TCP en mode connecté.
    		if (socketClient == INVALID_SOCKET) {
    			 printf("Error at socket(): %ld\n", WSAGetLastError());}
    		else 
    			{printf("Socket is OK\n");
    			 WSACleanup();
    			}
     
    	SOCKADDR_IN InfoServeur; //est une structure du SOCKADDR qui contient les informations techniques du socket
    	InfoServeur.sin_addr.s_addr	= inet_addr("172.22.34.8");//Appartient a la struct SOCKADDR_IN et contient l'adresse ip du serveur. 
    	InfoServeur.sin_family		= AF_INET; //AF_INET = Type de socket utilisé , pour internet ici, J'utilise l'IPV4.
    	InfoServeur.sin_port		= htons(3040); //htons(3040) Numéro du Port utilisé par le logiciel.
    	bind(socketClient, (SOCKADDR *)&InfoServeur, sizeof(InfoServeur)); // Cette fonction lie le socket au port et à l'adresse ip du serveur.
     
     
     
    //----------------------
      // Connect to server.
      if ( connect( socketClient, (SOCKADDR*) &InfoServeur, sizeof(InfoServeur) ) == SOCKET_ERROR) {
        printf( "Failed to connect.\n" );}
      else{
      printf ("Connexion Etablie au serveur");
      WSACleanup();}
     
     
    	send (socketClient,"halt",255,0);
     
        return 0;
    }
    Si vous pouvez m'aider je vous en remercie, et puis bien sur quand j'aurais fini mon programme je le ferais partager a tout le monde car l'aide est important dans ce domaine.

    tchao

  2. #2
    Membre Expert
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Par défaut
    Bonjour,

    ça coince où exactement?

    A l'envoi du message, ou à la connexion?

    Par contre,si mes souvenirs sont bons,t'as pas besoin de bind...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 8
    Par défaut
    ça coince au niveau de la connexion quand je compile mon programme j'ai fait des boucle pour savoir a chaque étapes si sa fonctionne et a la connexion, j'ai mon message "Failed to connect". Après je sais pas si sa fonctionne avec mon logiciel car je pense ue si il arrive pas a se connecter sur l'ip de la machine ou le logiciel est installé et le port que le logiciel utilise le send ne fonctionne pas.


    le BIND sert bien a lier les informations du serveur pour l'envoi de message par le socket??



    Citation Envoyé par supersnail Voir le message
    Bonjour,

    ça coince où exactement?

    A l'envoi du message, ou à la connexion?

    Par contre,si mes souvenirs sont bons,t'as pas besoin de bind...

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 485
    Par défaut
    Citation Envoyé par jerdream78 Voir le message
    le BIND sert bien a lier les informations du serveur pour l'envoi de message par le socket??
    Non. bind() sert à associer un socket à une adresse ou un nom en général (cas des sockets UNIX). Tu vas utiliser bind() du côté du serveur pour savoir à quel adresse, port ou nom de fichier il doit se mettre à l'écoute. C'est nécessaire pour que l'on puisse « joindre » ton socket. Par contre, ça n'a aucun intérêt du côté client. Pire, si tu assignes sur ton client les coordonnées de ton serveur, l'opération a toutes les chances d'échouer car tu utiliseras probablement un port interdit aux applications non privilégiées et l'adresse IP choisie sera invalide sur ta machine (puisque c'est celle du serveur). Encore pire : si ta machine arrive à associer le socket malgré tout, tu risques de déclencher un conflit d'adresses sur ton réseau.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 8
    Par défaut
    j'ai enlevé la fonction bind() et la fonction WSACleanup() après la création de mon socket, maintenant il se connecte bien, mais il m'envoie pas mon halt au logiciel avec ma fonction send().

    Sinon pouvez vous me dire si la fonction WSACleanup() doit être en fin du programme avec le close du socket, et aussi comment faire pour que le message reste actif tant que l'on n'a pas envoyé un autre message.

    merci.


    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    // Projet Final.cpp*: définit le point d'entrée pour l'application console.
    //
     
    #include "stdafx.h"
    #include <stdio.h> 
    #include <winsock2.h>
    #pragma comment(lib, "ws2_32.lib")
     
     
     
    int main()
    {
    	//Initialisation de la fonction WSAStartup,
    	//qui permet d'utiliser le fichier Winsock.DLL par un processus 
        WSADATA WSAData;
    	//"MAKEWORD(2,0)" = Indique la version de winsock que j'utilise qui est donc winsock2.
       int iResult = WSAStartup(MAKEWORD(2,0), &WSAData); 
       if (iResult != NO_ERROR) //Si iResult est différent de "NO_ERROR" continuer, sinon Afficher "Error at WSAStartup()"
       {printf("Error at WSAStartup()\n");}// Affiche "Error at WSAStartup()" au cas d'une erreur
       else 
       {printf("WSAStartup() is OK\n");
    	} 
       /* ... */
        //WSACleanup(); //Nettoyage du WSA 
     
    	///////////////////////////////Création du socket///////////////////////////////
     
    	SOCKET socketClient; //Définition du socket. sock est une variable de type SOCKET.
    	socketClient = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); //SOCK_STREAM = Utilisation du protocole TCP en mode connecté.
    		if (socketClient == INVALID_SOCKET) {
    			 printf("Error at socket(): %ld\n", WSAGetLastError());}
    		else 
    			{printf("Socket is OK\n");
    			}
     
     
    	//////////////INformation de l'adresse IP du Port et du protocole IPV4 utilisé/////////
     
    	SOCKADDR_IN InfoServeur; //est une structure du SOCKADDR qui contient les informations techniques du socket
    	InfoServeur.sin_addr.s_addr	= inet_addr("172.22.34.8");//Appartient a la struct SOCKADDR_IN et contient l'adresse ip du serveur. 
    	InfoServeur.sin_family		= AF_INET; //AF_INET = Type de socket utilisé , pour internet ici, J'utilise l'IPV4.
    	InfoServeur.sin_port		= htons(3040); //htons(3040) Numéro du Port utilisé par le logiciel.
     
     
     
     
    //----------------------
      // Connect to server.
      if ( connect( socketClient, (SOCKADDR*) &InfoServeur, sizeof(InfoServeur) ) == SOCKET_ERROR) {
        printf( "Failed to connect.\n" );}
      else{
      printf ("Connexion Etablie au serveur");
      WSACleanup();}
     
     
    	send (socketClient,"halt",255,0);
     
     
        return 0;
    }

    Citation Envoyé par Obsidian Voir le message
    Non. bind() sert à associer un socket à une adresse ou un nom en général (cas des sockets UNIX). Tu vas utiliser bind() du côté du serveur pour savoir à quel adresse, port ou nom de fichier il doit se mettre à l'écoute. C'est nécessaire pour que l'on puisse « joindre » ton socket. Par contre, ça n'a aucun intérêt du côté client. Pire, si tu assignes sur ton client les coordonnées de ton serveur, l'opération a toutes les chances d'échouer car tu utiliseras probablement un port interdit aux applications non privilégiées et l'adresse IP choisie sera invalide sur ta machine (puisque c'est celle du serveur). Encore pire : si ta machine arrive à associer le socket malgré tout, tu risques de déclencher un conflit d'adresses sur ton réseau.

  6. #6
    Membre Expert
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Par défaut
    Euuh... WSACleanup c'est à la fin du programme qu'on l'appelle...

    Pas après la connexion (WSACleanup dit qu'on veut plus utiliser les sockets)

Discussions similaires

  1. Problème de connexion sockets
    Par ptytomtok dans le forum Réseau
    Réponses: 16
    Dernier message: 15/04/2013, 21h01
  2. Problème de connexion sockets
    Par shadma dans le forum C#
    Réponses: 5
    Dernier message: 17/02/2011, 16h53
  3. problème de connexion :socket
    Par alamidev dans le forum C#
    Réponses: 0
    Dernier message: 29/04/2009, 13h23
  4. Problème de connexion socket
    Par stephane.julien dans le forum C#
    Réponses: 3
    Dernier message: 24/04/2008, 18h28
  5. problème de connexion sur un socket SSL
    Par koolway dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 21/06/2006, 11h20

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