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

Qt Discussion :

Qt et socket


Sujet :

Qt

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 174
    Points : 74
    Points
    74
    Par défaut Qt et socket
    Bonjour,
    j'essaye de créer un programme Qt et j'y met aussi la librairie winsock.h afin d'utiliser les socket.
    Le probleme c'est que j'ai un probleme en compilant(je precise que le code serveur en dessous du commentaire /** serveur */ marche dans la console)
    voici 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
    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
    #define P
    #include<QApplication>
    #include<QWidget>
    #include<QPushButton>
    #include <QTextEdit>
    #include <QString>
    #include <stdio.h>
    #include <stdlib.h>
    #include <winsock2.h>
    #include"ap.h"
     
     
    using namespace std;
    int main(int argc, char **argv)
    {
     
        QApplication app(argc,argv);
        QWidget fenetre;
        fenetre.resize(800,600);
     
        QPushButton boutonjer("jer",&fenetre);
        QPushButton boutonseb("Seb",&fenetre);
        QPushButton boutonthi("thi",&fenetre);
        cliquejer ac;
        cliquethi ac2;
     
     
        QPushButton boutonsend("envoyer",&fenetre);
        QTextEdit bddr(" ",&fenetre);
        QTextEdit bdds("Taper ici votre message a envoyer",&fenetre);
     
        boutonjer.setGeometry(10, 10,50,30);
        boutonseb.setGeometry(375, 10,50,30);
        boutonthi.setGeometry(740, 10,50,30);
        boutonsend.setGeometry(370, 500,75,45);
        bddr.setGeometry(12, 52,775,190);
        bdds.setGeometry(12, 280,775,190);
     
        fenetre.show();
        QPushButton::connect(&boutonjer,SIGNAL(clicked()),&ac,SLOT(AfficheConnect()));
        QPushButton::connect(&boutonthi,SIGNAL(clicked()),&ac2,SLOT(AfficheConnect()));
     
     
    /**serveur*/
    WSADATA WSAData;
    WSAStartup(MAKEWORD(2,0), &WSAData);
     
    SOCKET sock;
    SOCKADDR_IN sin;
    SOCKET sockbis;
    SOCKADDR_IN sinbis;
    char buffer[200];
    int val=1;
    int valb=1;
     
    sock=socket(AF_INET,SOCK_STREAM,0);
    if(sock !=-1)
    {
        sin.sin_addr.s_addr = htonl (INADDR_ANY);
        sin.sin_family = AF_INET;
        sin.sin_port = htons (8080);
        if(bind(sock,(SOCKADDR *)&sin, sizeof(sin)) != -1)
        {
            if(listen(sock,3) != SOCKET_ERROR)
            {
                printf("Attente d'une connexion...\n");
                while(val)
                {
                    int sinsize = sizeof(sinbis);
                    sockbis=accept(sock,(SOCKADDR *)&sinbis,&sinsize);
                    if(sockbis != SOCKET_ERROR)
                    {
                        printf("Connexion etablie\n\n\n\n");
                        val=0;
                        while(valb)
                        {
                            if(recv(sockbis,buffer,sizeof(buffer),0) != SOCKET_ERROR)
                            {
                                printf("%s\n",buffer);
     
                            }
                        }
                    }
                }
            }
        }
    }
    closesocket(sock);
    closesocket(sockbis);
    WSACleanup( );
        /***/
     
     
        return app.exec();
     
    }

    voici l'erreur:
    http://stopu.no-ip.org/img.php

    Pouvez vous m'aidez pour ce probleme??
    merci d'avance

  2. #2
    Membre confirmé

    Inscrit en
    Octobre 2007
    Messages
    234
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 234
    Points : 644
    Points
    644
    Par défaut
    Le problème a lieu au link, parce que la commande ne lui dit pas d'utiliser la lib Winsock (ws2_32.lib). Le plus simple, je pense que ça doit suffir, c'est d'ajouter dans ton fichier .pro la ligne:
    et refaire un coup de qmake, avant de compiler.

    Et tant qu'à faire, il est plus simple d'utiliser les classes du module QtNetwork (QTcpServer/QTcpSocket p.ex) que de faire du winsock pur (sauf quand c'est nécessaire.)

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 174
    Points : 74
    Points
    74
    Par défaut
    sa na pas fonctionner.

    Citation Envoyé par kinji1 Voir le message
    Et tant qu'à faire, il est plus simple d'utiliser les classes du module QtNetwork (QTcpServer/QTcpSocket p.ex) que de faire du winsock pur (sauf quand c'est nécessaire.)
    oui c'est ce que je vais faire mais j'aimerai bien comprendre pourquoi sa ne fonctionne pas avec winsock.

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Quo,
    Citation Envoyé par sebatlante Voir le message
    oui c'est ce que je vais faire mais j'aimerai bien comprendre pourquoi sa ne fonctionne pas avec winsock.
    kinji1 te l'a dit.
    Si les cons volaient, il ferait nuit à midi.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 174
    Points : 74
    Points
    74
    Par défaut
    Sa solution ne fonctionne pas. Il doit y avoir un autre truc qui bug.
    j'ai aussi testé de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #pragma comment(lib, "ws2_32.lib")
    mais sans resultat

  6. #6
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Sio,

    Les pragmas comme celui là ne servent absolument à rien pour QT, qui génère son propre makefile.

    Et je pense que la ligne rajoutée comme te l'a suggéré kinji1
    ne sert à rien dans ton cas, car sans autre précision, cela ne concerne que la librairie QT.

    Regarde la doc de qmake, et vois ce qu'il faut ajouter au fichier .pro pour forcer le lien avec une librairie.

    Si tu fais comme ça, il ne faut plus laisser qmake générer automatiquement le fichier .pro, sinon la ligne que tu dois ajouter manuellement sera effacée à chaque fois.
    C'est à dire qu'il ne faut plus exécuter
    et maintenir ce fichier manuellement (un peu pénible au début, mais ensuite ça devient de la routine)
    Si les cons volaient, il ferait nuit à midi.

  7. #7
    Membre confirmé

    Inscrit en
    Octobre 2007
    Messages
    234
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 234
    Points : 644
    Points
    644
    Par défaut
    C'est vrai, rajouter QT += network ne sert à rien ici, j'ai un peu di n'importe quoi là. Comme le suggère droggo, il faut changer le .pro en rajoutant je pense :
    Chez moi ça link bien sur un petit projet qui mixe QSocket et winsock.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 174
    Points : 74
    Points
    74
    Par défaut
    sa fonctionne.
    Le probleme maintenant c'est que mon programme ne reagit plus comme s'il etait bloque mais je pense que c'est à cause des boucle.
    Je pense donc que je pourrai me debrouiller pour ce probleme.

    merci pour vos reponses

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

Discussions similaires

  1. executer une application a distance : Sockets ? RPC ? CORBA?
    Par a_hic dans le forum Développement
    Réponses: 5
    Dernier message: 30/05/2006, 13h02
  2. raw socket et langage c
    Par SlayDave dans le forum Développement
    Réponses: 2
    Dernier message: 29/08/2002, 19h09
  3. socket
    Par ben91 dans le forum Développement
    Réponses: 5
    Dernier message: 13/08/2002, 11h04
  4. Socket:Envoyer du texte d'un serveur vers tout les clients
    Par cedm78 dans le forum Web & réseau
    Réponses: 7
    Dernier message: 01/08/2002, 16h40
  5. transfert d'un fichier bitmap en socket tcp
    Par localhost dans le forum C++Builder
    Réponses: 5
    Dernier message: 29/07/2002, 00h40

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