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

GTK+ avec C & C++ Discussion :

GTK et winsock


Sujet :

GTK+ avec C & C++

  1. #1
    Membre habitué Avatar de doderic
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 215
    Points : 165
    Points
    165
    Par défaut GTK et winsock
    Salut à tous!
    Je ne sais pas trop si ce forum correspond à mon blème mais ça pourrais être ça. VEuillez le déplacer si ce n'est pas le cas.
    J'écris une application client/serveur avec GTK! Le moment est venu où je dois faire cohabiter GTK et WINSOCK! Pour commencer j'ai écris deux petits programmes juste pour essayer. C'est composé de 2 fenêtre (1 client et un serveur). Si le client parvient à se connecter au serveur, il lui envoie un texte. si le serveur le reçoit alors il l'affiche dans une boite de dialogue. ce petit exemple pour tester ne marche pas. je ne sais pas si c'est un conflit avec la boucle de gtk. Veuillez consulter mon code que voici:

    partie serveur:
    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
    struct cli{
        pthread_t thread;
        SOCKADDR_IN sin;
        int recsize;
        SOCKET sock;
    };
     
     
    void *client(void *data)
    {
        struct cli *p2=(struct cli*)data;
        int end=0;
        gchar *info=NULL;
        unsigned char texte[50];
        int rep;
        do{
     
            rep=recv(p2->sock,texte,(sizeof(texte)-1),0);
            if(rep!=SOCKET_ERROR){
                info=g_strdup_printf("Message envoye par le client: %s",texte);
                informations(info);
                g_free(info);
        } else {
            erreur("Erreur de réception");
            end=1;
        }
     
        } while(end==0);
        shutdown(p2->sock,2);
        closesocket(p2->sock);
        free(p2);
        return NULL;
     
    }
    /*---------------------------------------*/
    void clients(SOCKET sock)
    {
        int end=0;
    do{
        struct cli*p=malloc(sizeof(*p));
        if(p!=NULL){
            p->recsize=(int)sizeof(p->sin);
            p->sock=accept(sock,(SOCKADDR*)&p->sin,&p->recsize);
            pthread_create(&p->thread,NULL,client,p);
            p=NULL;
        } else {
            end=1;
        }
    }while(end==0);
    }
    /*------------------------------------------------------------*/
     
    gboolean app(gpointer data)
    {
        SOCKET sock=socket(AF_INET,SOCK_STREAM,0);
        if(sock!=INVALID_SOCKET){
            SOCKADDR_IN sin={0};
            sin.sin_addr.s_addr=htonl(INADDR_ANY);
            sin.sin_family=AF_INET;
            bind(sock,(SOCKADDR*)&sin,sizeof(sin));
            listen(sock,5);
            clients(sock);
    }
    }
     
     
    int main (int argc, char *argv[])
    {
        GtkWidget *fenetre=NULL;
        WSADATA WSAData;
        WSAStartup(MAKEWORD(2,2),&WSAData);
     
     
        gtk_init(&argc,&argv);
     
        fenetre=gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_default_size(GTK_WINDOW(fenetre),320,200);
        gtk_window_set_title(GTK_WINDOW(fenetre),"Essai de Socket et GTK et THREAD");
        gtk_window_set_position(GTK_WINDOW(fenetre),GTK_WIN_POS_CENTER);
     
        g_signal_connect(G_OBJECT(fenetre),"destroy",G_CALLBACK(gtk_main_quit),NULL);
     
        gtk_widget_show_all(fenetre);
     
        g_idle_add((GSourceFunc)app,NULL);
        //app(NULL);
        gtk_main();
     
     
        WSACleanup();
        return 0;
    }
    code client:
    gboolean app(gpointer data)
    {
    char texte[]="OK";
    SOCKET sock=socket(AF_INET,SOCK_STREAM,0);
    if(sock!=INVALID_SOCKET){
    SOCKADDR_IN sin={0};
    sin.sin_addr.s_addr=inet_addr("127.0.0.1");
    sin.sin_family=AF_INET;
    sin.sin_port=htons(23);
    if(connect(sock,(SOCKADDR*)&sin,sizeof(sin))!=SOCKET_ERROR){
    send(sock,texte,sizeof(texte),0);
    }
    closesocket(sock);
    }
    }

    int main (int argc, char *argv[])
    {
    GtkWidget *fenetre=NULL;
    WSADATA WSAData;
    WSAStartup(MAKEWORD(2,2),&WSAData);


    gtk_init(&argc,&argv);

    fenetre=gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_default_size(GTK_WINDOW(fenetre),320,200);
    gtk_window_set_title(GTK_WINDOW(fenetre),"Essai de Socket et GTK et THREAD (CLIENT)");
    gtk_window_set_position(GTK_WINDOW(fenetre),GTK_WIN_POS_CENTER);

    g_signal_connect(G_OBJECT(fenetre),"destroy",G_CALLBACK(gtk_main_quit),NULL);

    gtk_widget_show_all(fenetre);

    g_idle_add((GSourceFunc)app,NULL);
    //app(NULL);
    gtk_main();


    WSACleanup();
    return 0;
    }

    Quelqu'un a t-il déjà écrit une application utilsant GTK et les sockets. si oui veuillez me sortir de ce pétrin je vous prie.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    ce petit exemple pour tester ne marche pas
    Mais encore ? Ca veut dire quoi "ne marche pas" ?

  3. #3
    Membre habitué Avatar de doderic
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 215
    Points : 165
    Points
    165
    Par défaut
    Ben ça veut juste dire que l'application ne fait ce qu'il est censé faire (ce que j'ai décrit plus haut).

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Ah oui pardon, donc quand tu lances ce programme, ça fait griller ta carte réseau au lieu de faire ce que tu souhaites que ton programme fasse, c'est bien ça ? En général, c'est lié à un problème électrique, donc il faut peut être regarder du côté de l'alimentation électrique de ton PC. Sauf si tu as testé sur plusieurs machines auquel cas il faudra trouver une autre réponse (à moins que Murphy ne s'en soit mêlé).

  5. #5
    Membre habitué Avatar de doderic
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 215
    Points : 165
    Points
    165
    Par défaut
    Mais non Teuf! tu vas trop loin. je dis que l'exemple que j'ai collé ne travaille pas. quand je lance les deux interfaces (client et serveur), le serveur n'affiche pas la boite de dialogue pour afficher le texte envoyé par le client. je me demande si le code des sockets que j'ai mis dedans est fonctionnel. exécute le code et tu verras ce que j'ai dis. j'arrive pas à faire cohabiter GTK et winsowk dans mon programme c'est ce que je veux dire en mettant cet exemple qui ne marche pas.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    1) j'ai pas windows
    2) même si j'avais windows, je prends rarement le temps de compiler les ex qu'on me file, en général avec qques explications, j'arrive à donner des pistes
    3) je sais que je vais trop loin, mais j'essaie de te faire comprendre que tes explications sont très insuffisantes. "Ca ne marche pas", ça peut vouloir dire :
    * que l'appli plante
    * que l'interface ne se rafraichit pas comme tu le voudrais
    * que l'interface ne s'affiche même pas (c'est l'impression que j'ai à lire ton post ?)
    * ....

  7. #7
    Membre habitué Avatar de doderic
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 215
    Points : 165
    Points
    165
    Par défaut
    Citation Envoyé par teuf13 Voir le message
    1) j'ai pas windows
    2) même si j'avais windows, je prends rarement le temps de compiler les ex qu'on me file, en général avec qques explications, j'arrive à donner des pistes
    3) je sais que je vais trop loin, mais j'essaie de te faire comprendre que tes explications sont très insuffisantes. "Ca ne marche pas", ça peut vouloir dire :
    * que l'appli plante
    * que l'interface ne se rafraichit pas comme tu le voudrais
    * que l'interface ne s'affiche même pas (c'est l'impression que j'ai à lire ton post ?)
    * ....
    Explications insuffisantes. je pense que tu dois bien relire mon post si tu veux bien comprendre ce que j'ai dis vu que je l'ai répété plusieurs. Je reprends:

    L'interface serveur se lance et s'affiche à l'écran. En lançant maintenant le client, le serveur doit instantanément afficher une boite de dialogue sur lequel se trouve le message envoyé par le client. JE pense que tu ne fais pas attention à la source. t'as qu'à mieux relire et tu comprendras mieux ce que je veux dire. Je veux dire que ce code est un exmple pour me permettre de continuer mon application c'est pour ça qu'il faut que j'y trouve une soluce. voilà! A+ et relis bien avant de...
    Bonne suite

  8. #8
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    J'ai bien compris ce que tu voulais obtenir, par contre j'ai beau relire ton post (je l'avais déjà relu une ou deux fois avant de poster la première fois), je n'arrive pas à voir une description du comportement en pratique du programme et c'est ça qui (à mon avis) manque pour répondre. En fonction des symptômes du problème, je ne prête pas attention aux mêmes choses quand je lis le code. Et là ton code est malheureusement un peu trop long (pour moi) pour que le lise attentivement sans avoir d'idée à priori sur le bug qu'il peut y avoir.

  9. #9
    Membre habitué Avatar de doderic
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 215
    Points : 165
    Points
    165
    Par défaut
    Citation Envoyé par teuf13 Voir le message
    J'ai bien compris ce que tu voulais obtenir, par contre j'ai beau relire ton post (je l'avais déjà relu une ou deux fois avant de poster la première fois), je n'arrive pas à voir une description du comportement en pratique du programme et c'est ça qui (à mon avis) manque pour répondre. En fonction des symptômes du problème, je ne prête pas attention aux mêmes choses quand je lis le code. Et là ton code est malheureusement un peu trop long (pour moi) pour que le lise attentivement sans avoir d'idée à priori sur le bug qu'il peut y avoir.
    alors là, je ne sais plus vraiment comment t'expliquer. J'espère au moins que quelqu'un d'autre comprendra ce que je veux dire. Tu sais quoi si tu dis que tu vois ce que je veux obtenir alors propose (si tu veux) ton code à toi qui pourrais faire alors ce que je veux pour être sur que t'as compris ce que je veux obtenir comme tu dis.

  10. #10
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Tu peux pas décrire ce que fait ton programme quand tu le lances ? "Rien", ça veut dire que rien ne s'affiche, pas même une fenêtre ? Ou bien est-ce qu'il plante ? Ou tout simplement, est-ce que tout s'affiche bien, sauf que rien ne semble arriver du réseau ?

  11. #11
    Membre habitué Avatar de doderic
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 215
    Points : 165
    Points
    165
    Par défaut
    J'ai oublié de repasser ici. finalement je l'ai résolu. Donc pour ceux qui ont suivi mon code; à la place de g_idle_add, j'ai appelé ma fonction App à partir d'un thread.

    Bonne suite à tous!

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

Discussions similaires

  1. [Winsock] Envoi et recupération d'une image
    Par arnolanf dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 29/11/2002, 08h49
  2. [Kylix] Kylix GTK et QT
    Par mailstef dans le forum EDI
    Réponses: 2
    Dernier message: 19/11/2002, 21h53
  3. [GTK]PB Librairie GTK+ sous dev-c++
    Par wozzy dans le forum Dev-C++
    Réponses: 15
    Dernier message: 05/11/2002, 14h55
  4. [VB6] [Winsock] Trouver un port libre
    Par Yann dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 14/10/2002, 11h23
  5. [Kylix] equivalent winsock avec kylix
    Par Victor dans le forum EDI
    Réponses: 2
    Dernier message: 08/05/2002, 07h43

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