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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé 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
    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 Expert
    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
    Par défaut
    ce petit exemple pour tester ne marche pas
    Mais encore ? Ca veut dire quoi "ne marche pas" ?

  3. #3
    Membre confirmé 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
    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 Expert
    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
    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 confirmé 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
    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 Expert
    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
    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 ?)
    * ....

+ 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