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

Langage C++ Discussion :

Widget serveur socket


Sujet :

Langage C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2016
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Widget serveur socket
    Bonjour, je voudrais faire un serveur tcp avec les socket sur Qt creator pour comparer des données recu avec une base de donnée.
    J'ai reussi le serveur seul en mode console mais avec une application widget le programme plante et je trouve pas comment faire
    j'ai laisser le main tel quel et intégrer LIBS+=-lws2_32 au .pro

    voici mes fichiers de code:

    widget.h
    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
     
    #ifndef WIDGET_H
    #define WIDGET_H
    #include <QWidget>
    #include "cserveur.h"
     
    namespace Ui {
    class Widget;
    }
     
    class Widget : public QWidget
    {
        Q_OBJECT
     
    public:
        explicit Widget(QWidget *parent = 0);
        ~Widget();
     
    private slots:
        void on_pushButton_Connecter_clicked();
        void on_pushButton_Requete_clicked();
        void on_pushButton_Serveur_clicked();
        void on_pushButton_Serveur_2_clicked();
     
    private:
        Ui::Widget *ui;
        CServeur * ptrserveur ;
    };
     
    #endif // WIDGET_H
    widget.cpp
    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
     
    #include "widget.h"
    #include "ui_widget.h"
    #include <QSqlDatabase>
    #include <QString>
    #include <iostream>
    #include <QSqlQuery>
    #include <QSqlRecord>
    #include <QMessageBox>
    #include <QSqlError>
    #include <QSqlQueryModel>
    #include "cserveur.h"
    #include "cserveur.cpp"
    using namespace std;
     
    Widget::Widget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Widget)
    {
        ui->setupUi(this);
     
       setPalette(QPalette(QColor(70, 120, 140)));
     }
     
    Widget::~Widget()
    {
        delete ui;
    }
     
    //-----------SERVEUR-----------------------------------------------------
    void Widget::on_pushButton_Serveur_clicked(){
    ptrserveur=new CServeur();
    ptrserveur->Csocket();
    }
    cserveur.h
    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
     
    #ifndef CSERVEUR_H
    #define CSERVEUR_H
    #include <iostream>
    #include <stdio.h>
    #include <winsock2.h>
    #include <stdlib.h>
    #include <fstream>
    #include <string.h>
    using namespace std;
     
    class CServeur
    {
    private :
    WSADATA initialisation_win32;
    SOCKET sock;
    SOCKADDR_IN information_sur_la_source;
    SOCKET newsock;
    int erreur;
    int tempo;
    char hostname[64];
    struct hostent *remoteHost;
    struct in_addr **adr;
     
    public:
    CServeur();
    ~CServeur();
    void Csocket();
    };
     
    #endif // CSERVEUR_H
    cserveur.cpp
    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
     
    #include "cserveur.h"
    #include <iostream>
    #include <stdlib.h>
    #include <winsock2.h>
    #include <stdio.h>
    #include <fstream>
    #include <string.h>
    using namespace std;
     
    CServeur::CServeur()
    {
       memset(hostname,0,sizeof hostname);
        cout<<"constructeur..."<<endl;
     
    //WSAStartup
        erreur=WSAStartup(MAKEWORD(2,2),&initialisation_win32);
        if(erreur!=0){
            cout<<"Winsock erreur : "<<erreur<<" ; "<<WSAGetLastError()<<endl;
        }
        else{
            printf("WSAStartup OK \n");
        }
     
    //ouverture socket
        sock=socket(AF_INET,SOCK_STREAM,0);
        if(sock==INVALID_SOCKET){
            cout<<"erreur socket"<<endl;
        }
        else{
            cout<<"socket OK"<<endl;
        }
     
        newsock=socket(AF_INET,SOCK_STREAM,0);
        if(newsock==INVALID_SOCKET){
            cout<<"erreur socket"<<endl;
        }
        else{
            cout<<"newsocket OK"<<endl;
        }
     
    //socket option
        tempo=1;
        erreur=setsockopt(sock,IPPROTO_TCP,TCP_NODELAY,(char *)&tempo,sizeof(tempo));
        if(erreur!=0){
            printf("erreur option : %d %d \n",erreur,WSAGetLastError());
        }
        else {
          cout<<"option OK"<<endl;
        }
     
        if((gethostname(hostname,sizeof hostname)!=0)){
            printf("erreur\n");           //err
            exit(1);
        }
        printf("nom de l'hote = %s \n",hostname);
     
        remoteHost = gethostbyname(hostname);
        if(remoteHost==NULL){
            fprintf(stderr,"erreur = %d \n",WSAGetLastError());
            exit(1);
        }
     
        for(adr=(struct in_addr**)remoteHost->h_addr_list;*adr;adr++){
            printf("adresse IP = %s \n",inet_ntoa(**adr));
        }
    }
     
    void CServeur::Csocket(){
    /**************************ECOUTE**************************/
        //bind
        information_sur_la_source.sin_family=AF_INET;
        information_sur_la_source.sin_addr.s_addr=INADDR_ANY; //ecoute sur tte ip locales
        information_sur_la_source.sin_port=htons(1234); //ecoute sur le port 12345
        erreur=bind(sock,(struct sockaddr*)&information_sur_la_source,sizeof(information_sur_la_source));
        if(erreur!=0)
            printf("port erreur : %d %d \n",erreur,WSAGetLastError());
        else
            printf("bind OK , %s\n",&information_sur_la_source);
     
        //listen
        int listen(SOCKET sock,int backlog);
        if (listen(sock,1) == SOCKET_ERROR) {
            cout<<"listen error"<<erreur<<" ; "<<WSAGetLastError()<<endl;;
        }
        else{
            cout<<"listen OK"<<endl;
        }
     
        //accept
        printf("attente de la reception de demande d'ouverrture de session tcp (SYN)\n");
        tempo=sizeof(information_sur_la_source);
        newsock=accept(sock,(struct sockaddr*)&information_sur_la_source,&tempo);
        if(newsock==INVALID_SOCKET){
            printf("session TCP erreur : %d \n",WSAGetLastError());
        }
        else{
            printf("accept OK \n");
        }
    }
    J'ai testé pas a pas et j'ai vu que c'est la partie accept qui fait planté... Vous avez une solution ?

  2. #2
    Provisoirement toléré
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Mars 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Architecte réseau
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2016
    Messages : 114
    Points : 0
    Points
    0
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        //listen
        int listen(SOCKET sock,int backlog);
    Pourquoi tu déclares toi-même les fonctions?

Discussions similaires

  1. [FLASH MX2004] [XMLSocket] Problème avec serveur socket php
    Par cocodunombril dans le forum Flash
    Réponses: 4
    Dernier message: 03/04/2009, 02h10
  2. Cherche code source serveur socket en C
    Par marco13 dans le forum Réseau
    Réponses: 2
    Dernier message: 05/10/2006, 12h05
  3. Compiler du java en natif & Optimisation serveur socket
    Par Skreo dans le forum API standards et tierces
    Réponses: 32
    Dernier message: 09/07/2006, 16h31
  4. problème de serveur socket
    Par hiul dragonfel dans le forum MFC
    Réponses: 3
    Dernier message: 01/06/2006, 11h56
  5. Question client-serveur socket
    Par Lex99 dans le forum Développement
    Réponses: 3
    Dernier message: 07/02/2006, 09h01

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