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 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
| #include "fenconnecter.h"
#include "ui_fenconnecter.h"
#include <QMessageBox>
FenConnecter::FenConnecter(QWidget *parent,int port) :
QMainWindow(parent),
ui(new Ui::FenConnecter)
{
ui->setupUi(this);
tailleMessage=0;
serveur = new QTcpServer(this);
if(serveur->listen(QHostAddress::Any, port)){
QMessageBox::information(this, "Information", "Le serveur est chargé sur le port 50000", QMessageBox::Ok);
connect(serveur, SIGNAL(newConnection()), this, SLOT(nouvelleConnexion()));
this->close();
}else{
QMessageBox::critical(this,"Erreur","Le serveur n'a pu etre chargé");
}
modele = new QStandardItemModel(1, 1);
//modele->setItem(3, 1, new QStandardItem("Zéro !"));
ui->tableView->setModel(modele);
//HorizontalHeader
//ui->tableView->setHorizontalHeader();
}
FenConnecter::~FenConnecter()
{
delete ui;
}
void FenConnecter::remplirTable(){
modele->setItem(clients.length(), 0, new QStandardItem("Clients "+QString::number(clients.length())));
}
void FenConnecter::ajoutServer(QTcpServer *srv){
serveur=srv;
QMessageBox::information(this,"test",serveur->errorString()+" / "+ QString::number(serveur->serverPort())+" / ");
}
void FenConnecter::nouvelleConnexion()
{
QMessageBox::information(this,"test","Un nouveau client vient de se connecter");
QTcpSocket *nouveauClient = serveur->nextPendingConnection();
clients << nouveauClient;
connect(nouveauClient, SIGNAL(readyRead()), this, SLOT(donneesRecues()));
remplirTable();
//connect(nouveauClient, SIGNAL(disconnected()), this, SLOT(deconnexionClient()));
}
void FenConnecter::donneesRecues()
{
QMessageBox::information(this,"test","Données recue");
// 1 : on reçoit un paquet (ou un sous-paquet) d'un des clients
// On détermine quel client envoie le message (recherche du QTcpSocket du client)
QTcpSocket *socket = qobject_cast<QTcpSocket *>(sender());
if (socket == 0) // Si par hasard on n'a pas trouvé le client à l'origine du signal, on arrête la méthode
return;
// Si tout va bien, on continue : on récupère le message
QDataStream in(socket);
QMessageBox::information(this,"test",QString::number(tailleMessage));
if (tailleMessage == 0) // Si on ne connaît pas encore la taille du message, on essaie de la récupérer
{
if (socket->bytesAvailable() < (int)sizeof(quint16)) // On n'a pas reçu la taille du message en entier
return;
in >> tailleMessage; // Si on a reçu la taille du message en entier, on la récupère
}
QMessageBox::information(this,"test","Taille message :"+QString::number(tailleMessage));
QMessageBox::information(this,"test","Taille du socket:"+QString::number(socket->bytesAvailable()));
QMessageBox::information(this,"test","etape1");
// Si on connaît la taille du message, on vérifie si on a reçu le message en entier
if (socket->bytesAvailable() < tailleMessage) // Si on n'a pas encore tout reçu, on arrête la méthode
return;
QMessageBox::information(this,"test","etape2");
// Si ces lignes s'exécutent, c'est qu'on a reçu tout le message : on peut le récupérer !
QString message;
in >> message;
QMessageBox::information(this,"test","etape3");
// 2 : on renvoie le message à tous les clients
QMessageBox::information(this,"test","le message est : "+message);
// 3 : remise de la taille du message à 0 pour permettre la réception des futurs messages
tailleMessage = 0;
QMessageBox::information(this,"test","etape4");
}
void FenConnecter::deconnexionClient()
{
//envoyerATous(tr("<em>Un client vient de se déconnecter</em>"));
// On détermine quel client se déconnecte
QTcpSocket *socket = qobject_cast<QTcpSocket *>(sender());
if (socket == 0) // Si par hasard on n'a pas trouvé le client à l'origine du signal, on arrête la méthode
return;
clients.removeOne(socket);
socket->deleteLater();
} |
Partager