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 :

Envoyer un buffer via un socket


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    geek
    Inscrit en
    Novembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : geek

    Informations forums :
    Inscription : Novembre 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Envoyer un buffer via un socket
    Bonjour.

    J'ai une carte relais 8 ports pilotable par wifi:
    Nom : relay8x.jpg
Affichages : 279
Taille : 47,9 Ko
    que je souhaiterai piloter via une petite interface graphique sous windows d'abord tout en étant compilable pour les autres O.S.
    J'ai commencé à dessiner l'idée de l'interface aussi:
    Nom : MP8X_GUI01.jpg
Affichages : 370
Taille : 135,8 Ko
    J'ai donc commencer à m'instruire en C++ mais suis ouvert à d'autres suggestions !
    Depuis plusieurs jours j'essaye tout simplement d'envoyer la commande qui permettrait d'éteindre tous les relais car ils sont tous allumés quand je mets le courant !
    Voici la liste des instructions fournies par le constructeur:
    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
    agreement£ºTCP/IP
    IP: 192.168.1.4
    port number£º      30000 
    code for the control of relay:
               1channel on£º FD 02 20 01 01 5D
               1channel off£º FD 02 20 01 00 5D
               2channel on£º FD 02 20 02 01 5D
               2channel off£º FD 02 20 02 00 5D
               3channel on£º FD 02 20 03 01 5D
               3channel off£º FD 02 20 03 00 5D¡¢
               4channel on£º FD 02 20 04 01 5D
               4channel off£º FD 02 20 04 00 5D
               5channel on£º FD 02 20 05 01 5D
               5channel off£º FD 02 20 05 00 5D
               6channel on£º FD 02 20 06 01 5D
               6channel off£º FD 02 20 06 00 5D
               7channel on£º FD 02 20 07 01 5D
               7channel off£º FD 02 20 07 00 5D
               8channel on£º FD 02 20 08 01 5D
               8channel off£º FD 02 20 08 00 5D
     
             1-8channel on£º FD 02 20 F8 88 5D
             1-8channel off£º FD 02 20 F8 80 5D
    Donc mon objectif est d'envoyer FD 02 20 F8 80 5D à 192.168.1.4 via le port 30000 pour commencer, et plus tard de faire une interface graphique pour pouvoir programmer chaque temps ON & OFF de chacun des 8 relais.

    Le logiciel "fourni" ne fonctionne pas ! sous windows, il se connecte mais une fois que je clique sur 1 des boutons, il gèle ! Je suis obligé de passer par le gestionnaire des taches pour l'arretter !

    Donc je decouvre que je ne pourrais pas utiliser Csocket car c'est propriété microsoft donc payant....
    Du coup je m'oriente vers du opensource : MinGW.
    Tant bien que mal je réussi à inclure les path et lib qui me permettent de compiler sans problème sous MinGW avec mon Eclipse.
    Mais impossible d'envoyer ce buffer précis !
    C'est alors que je vois dans http://www.mingw.org/wiki/FAQ :
    Porting Issues
    ...
    How do I use Windows sockets, rather than Unix sockets?
    ....
    Alors là çà m'en a mis un coup ! ! :O Ce serait pas possible ce que j'essaye de faire ! :o

    Voici le code qui "fonctionne", plutot qu'il est possible de compiler sans erreurs mais il n'envoi pas le databuffer :
    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
    /*
     * createSocket.cpp
     
     *
     *  Created on: Nov 18, 2014
     *      Author: Myke974
     */
    // mise à jour 20 novembre 2014 à 03:25 am
     
    // 	#include <winsock.h> // ancienne version winsock
     	#include <windows.h>
    	#include <winsock2.h> //
    	#include <ws2tcpip.h> // à vérifier si indispensable !
    	#include <stdio.h> // header file that comes in MinGW features many functions you are likely to need for your program, including the print and getchar functions, which are needed in practically any application.
    //	#include <socket.h> // introuvable ! ! d'après ce que je vois il suffirait d'utiliser winsock2.h !
    	#include <stdlib.h>
    	#include <iostream>
    //  typedef int socklen_t; // utile ?
    	using namespace std;
    // #pragma comment(lib, "ws2_32.lib") // windows proprietaire...
    // #pragma comment(lib, "libws2_32.a") //  renvoi : "ignoring pragma"....
     
    	int main(void) {
     
    	WSADATA WSAData;
        WSAStartup(MAKEWORD(2,0), &WSAData);
           /* ... */
        SOCKET sock;  	 //  initialise une variable de type SOCKET qui sera utilisée pour définir le socket.
        SOCKADDR_IN sin; // la struct du SOCKADDR contient les informations techniques du socket.
    //sock = SOCKET(AF_INET, SOCK_STREAM, 0); // avec SOCKET en majuscule on dirait que çà marche pas !
        sock = socket(AF_INET, SOCK_STREAM, 0);
        sin.sin_addr.s_addr	= inet_addr("192.168.1.4");
        sin.sin_family	= AF_INET;
        sin.sin_port = htons(30000);
     
        unsigned char databuffer[6],datareceive[1024]; //le databuffer va etre envoyé à l'interface
        databuffer[0]=0xFD;
        databuffer[1]=0x02;
        databuffer[2]=0x20;
        databuffer[3]=0xF8;
        databuffer[4]=0x80;
        databuffer[5]=0x5D;
     
        bind(sock, (SOCKADDR *)&sin, sizeof(sin));
        connect(sock, (SOCKADDR *)&sin, sizeof(sin));
        send(sock, "hello, world!\n", 6, 0); // fonctionne mais n'envoi pas le databuffer !
    // send(sock, (void *), databuffer, sizeof(sin));   // fonctionne pas
    // send(databuffer, sock, 6, 0);	 // envoi du databuffer ?  // fonctionne pas
    // ioctlsocket(sock, databuffer, 6); // à voir ce que c'est exactement...
    	datareceive[0] = 0;
    	int closesocket(int sock);   // pour fermer le socket.
        WSACleanup();
    //  system("PAUSE"); si besoin est...
    	return 0;
    }
    Les messages "Warnings":
    Description Resource Path Location Type
    ignoring #pragma comment [-Wunknown-pragmas] createSocket.cpp /Test04/src line 21 C/C++ Problem
    variable 'databuffer' set but not used [-Wunused-but-set-variable] createSocket.cpp /Test04/src line 36 C/C++ Problem
    variable 'datareceive' set but not used [-Wunused-but-set-variable] createSocket.cpp /Test04/src line 36 C/C++ Problem
    Un petit coup de main serait vraiement vraiement très apprécié !

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    c'est propriété microsoft donc payant
    T'as vu ça où ???
    Win32 est propriétaire, seul Microsoft a le doit de l'implémenté mais tout le monde à le droit de s'en servir.

    Faut pas lire n'importe quoi non plus.

    Je vais laisser les pingouins de la banquise te proposer leur solution tout droit sortie de la banquise POSIX.

    Mais avec la solution Windows, faut pas faire nimportenawak non plus.

    Alors ton code est encore très Windows (#include <Windows.h>) et sent bon la naphtaline des années 90.
    C'est winsock2.h et pas de winsock.h de l'époque patdef.

    Toujours initialiser la valeur des variables, ce qui n'est jamais fait dans votre code.

    C'est du code C, pas C++, il n'y a pas d'exception, il faut donc systématiquement vérifier le code retour des fonctions.

    Faut lire la documentation.
    Je sais que le C est assez laxiste dans le typage des paramètres, mais là, c'est la fête du slip, c'est passé dans n'importe quel ordre et on fait du sizeof de la fille du capitaine en bikini.
    On n'est pas à la plage, faut lire la documentation, la comprendre, et savoir ce que l'on fait.
    Un débuggeur peut vous aider à sortir du brouillard.

    Tout ça pour faire un truc que la moindre bibliothèque utilitaire, comme boost::asio, ferait bien mieux que vous et moi.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 963
    Points
    32 963
    Billets dans le blog
    4
    Par défaut
    Salut,

    ça part dans tous les sens.
    je ne pourrais pas utiliser Csocket car c'est propriété microsoft donc payant....
    Première nouvelle. Je connaissais pas cette classe, mais Google m'a révélé en ~1/10s qu'il s'agit de la classe de socket de MFC http://msdn.microsoft.com/en-us/library/wxzt95kb.aspx
    Du coup je m'oriente vers du opensource : MinGW.
    C'est un compilateur. Où est le rapport ?

    send(sock, "hello, world!\n", 6, 0); // fonctionne mais n'envoi pas le databuffer !
    Forcément, puisque tu envois "hello world\n".
    Peut-être faudrait-il faire un minimum de recherche ? Taper le nom de la fonction sur Google est suffisant. http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

    send(sock, (void *), databuffer, sizeof(sin)); // fonctionne pas
    // send(databuffer, sock, 6, 0); // envoi du databuffer ? // fonctionne pas
    Donc tu tapes au hasard pour espérer tomber sur la bonne syntaxe ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    send(sock, databuffer, 6, 0);
    Magie.

    int closesocket(int sock); // pour fermer le socket.
    A nouveau des caractères au hasard..?

    Ton problème est simple amha : avant de courir, on apprend à marcher. Tu ne sembles pas connaître la syntaxe de base du langage, alors vouloir utiliser des sockets, c'est pas pour tout de suite.


    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
    #include <WinSock2.h>
    #include <iostream>
    WSAData wsaData;
    	WSAStartup(MAKEWORD(2,2), &wsaData);
     
    	SOCKET Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    	if (Socket == INVALID_SOCKET)
    	{
    		std::cout<<WSAGetLastError()<<std::endl;
    		return false;
    	}
    	sockaddr_in ServerAddress;
            ServerAddress.sin_addr.s_addr = inet_addr("192.168.4.1");
    	ServerAddress.sin_family = AF_INET;
    	ServerAddress.sin_port = htons(30000);
    	if (connect(Socket, (sockaddr*)&ServerAddress, sizeof(ServerAddress)) == SOCKET_ERROR)
    	{
    		std::cout<<"connection failed"<<std::endl;
    		shutdown(Socket, SD_BOTH);
    	        closesocket(Socket);
            }
    int sent = send(Socket, databuffer, 6, 0);
    shutdown(Socket, SD_BOTH);
    	        closesocket(Socket);
    A vue de nez, c'est un truc comme ça pour une connection et envoi simple.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    geek
    Inscrit en
    Novembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : geek

    Informations forums :
    Inscription : Novembre 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci pour les réponses.
    Je fais appel à votre indulgence : j'ai beau lire et relire, il y a beaucoup à assimiller !

    Effectivement plusieurs fois j'ai lu et relu cette page de microsoft sur la fonction send:
    int send(
    _In_ SOCKET s,
    _In_ const char *buf,
    _In_ int len,
    _In_ int flags
    );
    malgré tous mes essais, et même après avoir essayé ce code:

    Citation Envoyé par Bousk Voir le message

    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
    #include <WinSock2.h>
    #include <iostream>
    WSAData wsaData;
    	WSAStartup(MAKEWORD(2,2), &wsaData);
     
    	SOCKET Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    	if (Socket == INVALID_SOCKET)
    	{
    		std::cout<<WSAGetLastError()<<std::endl;
    		return false;
    	}
    	sockaddr_in ServerAddress;
            ServerAddress.sin_addr.s_addr = inet_addr("192.168.4.1");
    	ServerAddress.sin_family = AF_INET;
    	ServerAddress.sin_port = htons(30000);
    	if (connect(Socket, (sockaddr*)&ServerAddress, sizeof(ServerAddress)) == SOCKET_ERROR)
    	{
    		std::cout<<"connection failed"<<std::endl;
    		shutdown(Socket, SD_BOTH);
    	        closesocket(Socket);
            }
    int sent = send(Socket, databuffer, 6, 0);
    shutdown(Socket, SD_BOTH);
    	        closesocket(Socket);
    A vue de nez, c'est un truc comme ça pour une connection et envoi simple.
    j'ai toujours la meme erreur qui revient :
    Invalid arguments '
    Candidates are:
    int send(unsigned int, const char *, int, int)
    '
    Le code qui marche sans problème est:
    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
    /*
     * example.cpp
     *
     *  Created on: Nov 20, 2014
     *      Author: Myke974
     */
     
    #include <iostream>
    #include <winsock2.h>
    #include <string>
    // #include <stdio.h>
    // #include <stdlib.h>
     
    int main()
    {
        WSAData version;        //We need to check the version.
        WORD mkword=MAKEWORD(2,2);
        int what=WSAStartup(mkword,&version);
        if(what!=0){
            std::cout<<"This version is not supported! - \n"<<WSAGetLastError()<<std::endl;
        }
        else{
            std::cout<<"Good - Everything fine!\n"<<std::endl;
        }
     
        SOCKET u_sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
            if(u_sock==INVALID_SOCKET)
                std::cout<<"Creating socket fail\n";
     
            else
                std::cout<<"It was okay to create the socket\n";
     
            //Socket address information
               sockaddr_in addr;
               addr.sin_family=AF_INET;
               addr.sin_addr.s_addr=inet_addr("192.168.1.4");
               addr.sin_port=htons(30000);
               /*==========Addressing finished==========*/
     
               //Now we connect
                   int conn=connect(u_sock,(SOCKADDR*)&addr,sizeof(addr));
                   if(conn==SOCKET_ERROR){
                       std::cout<<"Error - when connecting "<<WSAGetLastError()<<std::endl;
                       closesocket(u_sock);
                       WSACleanup();
                   }
     
                   //Send some message to remote host
                       char* mymsg="GET / HTTP/1.1\r\n\r\n";
                       char vect[512]={0};
     
                       int smsg=send(u_sock,mymsg,sizeof(mymsg),0);
                       if(smsg==SOCKET_ERROR){
                           std::cout<<"Error: "<<WSAGetLastError()<<std::endl;
                           WSACleanup();
                       }
     
                       int get=recv(u_sock,vect,512,0);
                       if(get==SOCKET_ERROR){
                           std::cout<<"Error in Receiving: "<<WSAGetLastError()<<std::endl;
                       }
                       std::cout<<vect<<std::endl;
                       closesocket(u_sock);
                       return 0;
                   }
    source

    Pourriez-vous me diriger pour que je puisse le modifier et y rajouter l'instruction FD 02 20 F8 80 5D svp?

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    Si le code qui tu fourni fonction, on a un petit problème.
    Ce code utilise le protocole HTTP au dessus du protocole TCP, c'est donc que c'est un serveur Web qui écoute sur le port TCP 30000 de la machine d'IP 192.168.1.4.
    Si c'est le cas, votre chaine d'octet "FD 02 20 F8 80 5D" ressemble à tous sauf à une requête HTTP.
    Il faut potasser un peu la documentation, car c'est clairement pas cohérent.

    Sinon, pour envoyé la chaine de commande à la place de la requête Web, faut juste remplace "char* mymsg="GET / HTTP/1.1\r\n\r\n";" par "char* mymsg="\xFD\x02\x20\xF8 80\x5D"

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    geek
    Inscrit en
    Novembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : geek

    Informations forums :
    Inscription : Novembre 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Si le code qui tu fourni fonction, on a un petit problème.
    Ce code utilise le protocole HTTP au dessus du protocole TCP, c'est donc que c'est un serveur Web qui écoute sur le port TCP 30000 de la machine d'IP 192.168.1.4.
    Si c'est le cas, votre chaine d'octet "FD 02 20 F8 80 5D" ressemble à tous sauf à une requête HTTP.
    Il faut potasser un peu la documentation, car c'est clairement pas cohérent.
    Effectivement, j'ai besoin d'envoyer une chaine d'octets mais j'ai voulu tester un code qui fonctionnait sùr.

    Citation Envoyé par bacelar Voir le message
    Sinon, pour envoyé la chaine de commande à la place de la requête Web, faut juste remplace "char* mymsg="GET / HTTP/1.1\r\n\r\n";" par "char* mymsg="\xFD\x02\x20\xF8 80\x5D"
    OK !

    Si j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     char* mymsg="\xFD\x02\x20\xF8\x80\x5D";
    char vect[1024]={0};
    int smsg=send(u_sock,mymsg,sizeof(mymsg),0);
    j'ai un Warning au niveau de cette première ligne !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
    D'après ce que j'ai lu : char sert à envoyer un caractère, mais dans mon cas ce serait plutot une chaine de caractères ? string ?
    Quelle différence apporte l'étoile ? char*

  7. #7
    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
    je ne pourrais pas utiliser Csocket car c'est propriété microsoft donc payant....
    Citation Envoyé par Bousk Voir le message
    Première nouvelle. Je connaissais pas cette classe, mais Google m'a révélé en ~1/10s qu'il s'agit de la classe de socket de MFC http://msdn.microsoft.com/en-us/library/wxzt95kb.aspx
    Tu contredis une chose puis juste après tu la confirmes: À moins que ça ait changé récemment, MFC est une bibliothèque payante de Microsoft: Elle n'est livrée qu'avec les versions payantes de Visual Studio.


    Citation Envoyé par Myke974 Voir le message
    Si j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char* mymsg="\xFD\x02\x20\xF8\x80\x5D";
    char vect[1024]={0};
    int smsg=send(u_sock,mymsg,sizeof(mymsg),0);
    j'ai un Warning au niveau de cette première ligne !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    const char* mymsg="\xFD\x02\x20\xF8\x80\x5D";

    Au passage, sizeof ne marche pas sur les pointeurs.
    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.

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    Au passage, sizeof ne marche pas sur les pointeurs.
    Alors le code ne devrait pas fonctionner.

    j'ai un Warning au niveau de cette première ligne !
    cf. Message de Médinoc => ajout d'un const

    D'après ce que j'ai lu : char sert à envoyer un caractère, mais dans mon cas ce serait plutot une chaine de caractères ? string ?
    char est le nom d'un type correspondant à au moins 7 bits permettant de contenir un caractère de la table ASCII.
    Quelle différence apporte l'étoile ? char* .
    Ici, c'est du code très sale des années 80 où char* correspond à un pointeur sur nimportnawak.

    Vérifiez que votre code fonction en remplaçant le 3ème paramètre de send par la longueur de la chaine par une valeur en dure
    sizeof(mymsg) 6

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    geek
    Inscrit en
    Novembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : geek

    Informations forums :
    Inscription : Novembre 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    ...À moins que ça ait changé récemment, MFC est une bibliothèque payante de Microsoft: Elle n'est livrée qu'avec les versions payantes de Visual Studio.
    Voilà c'est ce que j'avais essayé de formuler

    Citation Envoyé par Médinoc Voir le message
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    const char* mymsg="\xFD\x02\x20\xF8\x80\x5D";
    Merci ! j'avais essayé et çà fonctionnait comme çà effectivement !

    Citation Envoyé par Médinoc Voir le message
    Au passage, sizeof ne marche pas sur les pointeurs.
    Noté ! J'ai donc modifié mon code en fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    const char* mymsg="\xFD\x02\x20\xF8\x80\x5D";
    char vect[512]={0};
    int smsg=send(u_sock,mymsg,6,0);
    Merci !

    Compilation OK !
    Aucun message d'erreurs ou de Warning !

    Il me faut maintenant comprendre et paufiner la communication pour que s'éteignent tous les relais ! ce qui n'est pas le cas !
    Quelquechose me dis que ce sont les lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char vect[512]={0};
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int get=recv(u_sock,vect,512,0);
    qui coincent

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    Utilisez un sniffer réseau comme WireShark pour être un peu moins dans le brouillard.

Discussions similaires

  1. Réponses: 6
    Dernier message: 05/12/2008, 21h19
  2. Envoyer des bytes via socket
    Par Mr Chinaski dans le forum Réseau/Web
    Réponses: 2
    Dernier message: 06/11/2008, 18h15
  3. Envoyer un fichier via FTP via un socket
    Par JnJp28 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 24/05/2007, 20h37
  4. Envoyer et recuperer des buffers avec les Socket
    Par kaderscream dans le forum C++Builder
    Réponses: 2
    Dernier message: 19/08/2006, 11h44
  5. [Tableaux] Envoyer de l'hexa via une socket PHP
    Par N3odyme dans le forum Langage
    Réponses: 2
    Dernier message: 06/05/2006, 19h34

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