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

  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 476
    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 476
    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)

  7. #7
    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
    Citation Envoyé par supersnail Voir le message
    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)


    salut supersnail je viens de finir ce que je voulais j'ai compris le principe, la fonction WSACleanup est bien à la fin du programme moi je l'ai mis en fin de chaque send mais tu peux juste le mettre a la fin.

    je te laisse mon code fini:

    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    // 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"); // Affiche si la fonction WSAStartup() s'est bien executé
    	} 
       /* ... */
        //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) { //boucle de Test du socket.
    			 printf("Error at socket(): %ld\n", WSAGetLastError());} // S'affiche si la création du socket a échoué .
    		else 
    			{printf("Socket is OK\n"); // S'affiche si le socket s'est bien créer.
    			}
     
     
    	//////////////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.
     
     
     
     
    //----------------------
      // Connection au server.
      if ( connect( socketClient, (SOCKADDR*) &InfoServeur, sizeof(InfoServeur) ) == SOCKET_ERROR) { // Boucle de Test et de connection au serveur.
        printf( "Failed to connect.\n" );} // Affiche si erreur.
      else{
      printf ("Connexion Etablie au serveur\n"); // Sinon connexion OK.
      //WSACleanup();
      }
     
     
      //Send() Fonction d'envoie de message
     
      ////////////////////////Commande STOP////////////////////////
     
     
    	/*char *haltbuf = "halt\r"; // Initialise d'un étoile char haltbuf.
        int iSend = send( socketClient, haltbuf, (int)strlen(haltbuf), 0 ); // Fonction d'envoie de message au serveur.
        if (iSend == SOCKET_ERROR) { //boucle d'erreur
            printf("send() failed with error: %d\n", WSAGetLastError()); // Affiche message d'erreur si envoie du message échoué.
            closesocket(socketClient); // Fermeture du socket.
            WSACleanup(); // Nettoyage du WSA.
            return 1; // retour ma valeur 1.
        }
     
    	printf(" Send: %s\n", haltbuf);*/
     
     
      ////////////////////////Commande PLAY////////////////////////
     
      /*char *runbuf = "run\r"; 
        int iSend = send( socketClient, runbuf, (int)strlen(runbuf), 0 );
        if (iSend == SOCKET_ERROR) {
            printf("send() failed with error: %d\n", WSAGetLastError());
            closesocket(socketClient);
            WSACleanup();
            return 1;
        }
     
    	printf(" Send: %s\n", runbuf);*/
     
     
      ////////////////////////Commande gotoTime////////////////////////
     
      /*char *gotoTime = "gotoTime 600000\r"; 
        int iSend = send( socketClient, gotoTime, (int)strlen(gotoTime), 0 );
        if (iSend == SOCKET_ERROR) {
            printf("send() failed with error: %d\n", WSAGetLastError());
            closesocket(socketClient);
            WSACleanup();
            return 1;
        }
     
    	printf(" Send: %s\n", gotoTime);*/
     
     
      	////////////////////////Commande gotoControlCue////////////////////////
     
       /* char *gotoControlCue = "gotoControlCue F1\r"; 
        int iSend = send( socketClient, gotoControlCue, (int)strlen(gotoControlCue), 0 );
        if (iSend == SOCKET_ERROR) {
            printf("send() failed with error: %d\n", WSAGetLastError());
            closesocket(socketClient);
            WSACleanup();
            return 1;
        }
     
    	printf(" Send: %s\n", gotoControlCue);*/
     
     
    		////////////////////////Commande online////////////////////////
     
       /* char *online = "online\r"; 
        int iSend = send( socketClient, online, (int)strlen(online), 0 );
        if (iSend == SOCKET_ERROR) {
            printf("send() failed with error: %d\n", WSAGetLastError());
            closesocket(socketClient);
            WSACleanup();
            return 1;
        }
     
    	printf(" Send: %s\n", online);*/
     
     
      ////////////////////////Commande online////////////////////////
     
    	/*char *standby = "standBy\r"; 
        int iSend = send( socketClient, standby, (int)strlen(standby), 0 );
        if (iSend == SOCKET_ERROR) {
            printf("send() failed with error: %d\n", WSAGetLastError());
            closesocket(socketClient);
            WSACleanup();
            return 1;
        }
     
    	printf(" Send: %s\n", standby);*/
     
     
    	// cleanup 
     
    	closesocket(socketClient); // Ferme le socket
    	WSACleanup(); // Nettoyage du WSA 
     
     
     
         return 0;
    }

    Maintenant je cherche comment programmer ce code en BASIC pour un PIC 16F877 quelqu'un peu m'aider merci j'utiliserai aussi le TCP sur mon pic.

  8. #8
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 35
    Par défaut
    Citation Envoyé par jerdream78 Voir le message
    Maintenant je cherche comment programmer ce code en BASIC pour un PIC 16F877 quelqu'un peu m'aider merci j'utiliserai aussi le TCP sur mon pic.
    Alors la je pense que tes pas sortie de l'auberge parceque si ton PIC est programmable en c il ne faut pas oublier que toutes les opérations que tu a faites dans ton programme sont des appels système appel qui dépende de ton noyau or je doute que ton pic gère tous ces appels il ne faut pas confondre programation en c et programation système.
    Si toute fois tu veu faire cela tu dois (je l'ai déjà fait sur un micro a coeur ARM) alloué suffisement de mémoire à ton PIC pour installé un mini OS (moi j'utilise µlinux) et te battre avec de la configuration de périphérique.
    ou alors te taper de la programmation réseau directement sur ton PIC auquelle cas il faudras que tu reprenne toute l'encapsulation de tes données.
    Mais bon si j'ai bien saisie ton problème qui est de créer une télécommande à brancher sur une machine? Pourquoi veut tu passer par le réseau faire cela via un port USB ou plus simple sur une liaison RS-232 me paraît plus résonable en partant d'un PIC il faudra cependant que tu écrives des drivers côter machine.

  9. #9
    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
    Bonjour,

    Pour programmer en PIC je verrais avec le technicien de ma boite qui a déjà programmer en BASIC pour PIC.
    Mes professeurs mon proposé de le faire sur Windows Mobile, ce qui est intéressent pour moi et mon entreprise, le seul hic c'est que mon programme que j'avais créer en mode console ne fonctionne pas correctement sur mon appli windows mobile c'est à dire que mon appli se connecte bien au serveur mais n'arrive pas en envoyer de message a mon serveur.
    Mon serveur communique en UTF-8 UNICODE (j'ai un peu cherché sur ce sujet sans trouvé vraiment d'aide) Pouvez vous me dire comment modifier mon code qui est dans mon bouton connexion pour qu'il puisse envoyé en ce standard.

    voici mon code qui est le même que sur mon mode console:

    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    // SocketAplicationDlg.cpp : fichier d'implémentation
    //
     
    #include "stdafx.h"
    #include <stdio.h>
    #include "SocketAplication.h"
    #include "SocketAplicationDlg.h"
     
     
     
    #include <winsock2.h>
    //#pragma comment(lib, "ws2_32.lib")
     
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
     
     
    //CSocket *SocketClient; // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     
    // Boîte de dialogue CSocketAplicationDlg
     
    CSocketAplicationDlg::CSocketAplicationDlg(CWnd* pParent /*=NULL*/)
    	: CDialog(CSocketAplicationDlg::IDD, pParent)
    	, TextLog(_T(""))
    {
    	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
     
     
    }
     
    void CSocketAplicationDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	DDX_Text(pDX, IDC_EDIT1, TextLog);
    }
     
    BEGIN_MESSAGE_MAP(CSocketAplicationDlg, CDialog)
    #if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
    	ON_WM_SIZE()
    #endif
    	//}}AFX_MSG_MAP
    	ON_BN_CLICKED(IDC_BUTTON1, &CSocketAplicationDlg::OnBnClickedButton1)
    	ON_BN_CLICKED(IDC_BUTTON2, &CSocketAplicationDlg::OnBnClickedButton2)
    	ON_EN_CHANGE(IDC_EDIT1, &CSocketAplicationDlg::OnEnChangeEdit1)
    END_MESSAGE_MAP()
     
     
    // Gestionnaires de messages pour CSocketAplicationDlg
     
    BOOL CSocketAplicationDlg::OnInitDialog()
    {
    	CDialog::OnInitDialog();
     
    	// Définir l'icône de cette boîte de dialogue. L'infrastructure effectue cela automatiquement
    	//  lorsque la fenêtre principale de l'application n'est pas une boîte de dialogue
    	SetIcon(m_hIcon, TRUE);			// Définir une grande icône
    	SetIcon(m_hIcon, FALSE);		// Définir une petite icône
     
    	// TODO*: ajoutez ici une initialisation supplémentaire
     
    	return TRUE;  // retourne TRUE, sauf si vous avez défini le focus sur un contrôle
    }
     
    #if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
    void CSocketAplicationDlg::OnSize(UINT /*nType*/, int /*cx*/, int /*cy*/)
    {
    	if (AfxIsDRAEnabled())
    	{
    		DRA::RelayoutDialog(
    			AfxGetResourceHandle(), 
    			this->m_hWnd, 
    			DRA::GetDisplayMode() != DRA::Portrait ? 
    			MAKEINTRESOURCE(IDD_SOCKETAPLICATION_DIALOG_WIDE) : 
    			MAKEINTRESOURCE(IDD_SOCKETAPLICATION_DIALOG));
    	}
    }
    #endif
     
     
     
     
    void CSocketAplicationDlg::OnBnClickedButton1() // Boutton Connexion
    {
    	// TODO : ajoutez ici le code de votre gestionnaire de notification de contrôle
     
    	// SocketClient = new CSocket;
     
    	//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()"
       { GetDlgItem(IDC_EDIT1)->SetWindowTextW(_T("Error at WSAStartup()\n"));
    	   //printf("Error at WSAStartup()\n");// Affiche "Error at WSAStartup()" au cas d'une erreur
       }
       else 
       {GetDlgItem(IDC_EDIT1)->SetWindowTextW(_T("WSAStartup() is OK\n"));
    	   //printf("WSAStartup() is OK\n"); // Affiche si la fonction WSAStartup() s'est bien executé
    	} 
       /* ... */
        //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) { //boucle de Test du socket.
    			 printf("Error at socket(): %ld\n", WSAGetLastError());} // S'affiche si la création du socket a échoué .
    		else 
    			{GetDlgItem(IDC_EDIT1)->SetWindowTextW(_T("Socket is OK\n"));
    				//printf("Socket is OK\n"); // S'affiche si le socket s'est bien créer.
    			}
     
     
    	//////////////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.
     
     
     
     
    //----------------------
      // Connection au server.
      if ( connect( socketClient, (SOCKADDR*) &InfoServeur, sizeof(InfoServeur) ) == SOCKET_ERROR) { // Boucle de Test et de connection au serveur.
        GetDlgItem(IDC_EDIT1)->SetWindowTextW(_T("Failed to connect.\n"));
    	  //printf( "Failed to connect.\n" ); // Affiche si erreur.
      }
      else{
    	  GetDlgItem(IDC_EDIT1)->SetWindowTextW(_T("Connexion Etablie au serveur\n"));
      //printf ("Connexion Etablie au serveur\n"); // Sinon connexion OK.
      //WSACleanup();
      }
     
     
      //Send() Fonction d'envoie de message
     
      ////////////////////////Commande STOP////////////////////////
     
     
    	char *haltbuf = "halt\r"; // Initialise d'un étoile char haltbuf.
        int iSend = send( socketClient, haltbuf, (int)strlen(haltbuf), 0 ); // Fonction d'envoie de message au serveur.
        if (iSend == SOCKET_ERROR) { //boucle d'erreur
            printf("send() failed with error: %d\n", WSAGetLastError()); // Affiche message d'erreur si envoie du message échoué.
            closesocket(socketClient); // Fermeture du socket.
            WSACleanup(); // Nettoyage du WSA.
     
        }
    	CString Str;
    	Str.Format(_T(" Send: %s\n"), haltbuf);
    	TextLog.Append(Str);
    	//printf(" Send: %s\n", haltbuf);
     
     
      ////////////////////////Commande PLAY////////////////////////
     
     /* char *runbuf = "run\r"; 
        int iSend = send( socketClient, runbuf, (int)strlen(runbuf), 0 );
        if (iSend == SOCKET_ERROR) {
            printf("send() failed with error: %d\n", WSAGetLastError());
            closesocket(socketClient);
            WSACleanup();
            
        }
     
    	printf(" Send: %s\n", runbuf);*/
     
     
    	// cleanup 
     
    	closesocket(socketClient); // Ferme le socket
    	WSACleanup(); // Nettoyage du WSA 
     
     
    	UpdateData(false);
     
     
    }
     
    void CSocketAplicationDlg::OnBnClickedButton2() // Boutton Play
    {
    	// TODO : ajoutez ici le code de votre gestionnaire de notification de contrôle
     
    }
     
    void CSocketAplicationDlg::OnEnChangeEdit1()
    {
    	// TODO:  S'il s'agit d'un contrôle RICHEDIT, le contrôle
    	// n'enverra la notification que si vous substituez la fonction CDialog::OnInitDialog()
    	// et l'appel CRichEditCtrl().SetEventMask()
    	// avec l'indicateur ENM_CHANGE ajouté au masque grâce à l'opérateur OR.
     
    	// TODO:  Ajoutez ici le code de votre gestionnaire de notification de contrôle
    }


    Il y à une notice qui parle de ce standard pour le logiciel, peut etre que sa permettra de comprend pas comme moi je le met comme 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
    A command consists of a command name, sometimes followed by parameters.
     
    Commands are encoded using the UTF-8 UNICODE character format, which is
    downward compatible with ASCII strings.
     
     IMPORTANT: Commands containing non-ASCII characters – such as å, ä,
    ü, ç – must be encoded using the UTF-8 format.
     
    String parameters are sent within double quotes. Backslash is used as an
    escape character (that is, to encode a double quote in a string, precede it with
    a backslash). To send a backslash character, use “\\” inside the string.
    Commands are case sensitive. Successfully performed commands are not
    acknowledged.
     
     
    Errors : If an error occurs while processing a command, an error response is returned:
    Error <uint> <string> <string>\n
     
    where the first parameter is an internal error code number, the second parameter is a quoted string containing the error message, and the third parameter is a copy of the offending command, also as a quoted string.

    J'ai aussi un petit problème, quand je lance mon appli il ne peux pas communiquer avec le serveur car la simulation ne fonctionne pas avec le windows mobile. Mon Prof ma dit qu'il faut configurer la simulation du portable pour qu'il puisse se connecter sur internet, mais je n'ai pas trouvé la solution encore.




    J'espère que quelqu'un dans ce monde pourra m'aider sa me ferai super plaisr


    Merci d'avance.

    Jerdream

  10. #10
    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,

    Essaie peut-être ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        int iSend = send( socketClient, haltbuf, 1024, 0 ); // Fonction d'envoie de message au serveur.
    et définir ton haltbuf à 1024 octets.

    Le 1024 est la taille d'un paquet TCP standard,et il se peut que certains serveurs n'acceptent des paquets QUE de 1024 octets (j'en ai fait l'expérience)

    Sinon tu n'as pas à te préoccuper de l'encodage pour le moment, vu que tu n'utilises pas de caractères accentués (l'encodage est juste une manière d'écrire les caractères accentués .

  11. #11
    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
    Bonjour à tous,

    J'ai une petite question qui me trotte depuis un petit moment, comment récupérer les handles des theads du processus vlc en utilisant la fonction FindWindowsEX().


    Merci de vos futur réponse.

    bonne journée.

    Jerdream

  12. #12
    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
    Bonjour à tous,

    J'ai besoin de vos lumières, suite de mon projet, j'aimerai quand l'utilisateur lance mon application windows mobile on lui demande d'entrer l'adresse IP de la machine qu'il doit contrôler. Sur mon code j'ai quelque ligne qui donne les infos du serveur ou il doit se connecter (voir ci-dessous).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //////////////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("192.168.178.112");//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.
    Pouvez-vous me dire comment je peux faire pour l'adresse ip (en rouge) qui est dans le inet_addr(), car l'adresse ip est en temps que chaine de caractère.



    Merci d'avance de votre aide.

    Jerdream

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