Witajcie.
Właśnie piszę serwer w Qt i napotkałem mały problem:
Załóżmy, że mam tablice klas. Każda klasa z tej tablicy składa się z QTcpSocket oraz 1 zmiennej typu QString, ale to mało istotne.I teraz chciałbym, aby każdy element z tej tablicy był przeznaczona dla 1 clienta, gdyż serwer będzie obsługiwał wiele clientów. Tu jest kod, które pokazuję co udało już mi się zrobić:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
server = new QTcpServer(this);
id = 0;
server->listen(QHostAddress::Any,666);
connect(server,SIGNAL(newConnection()),this,SLOT(addClient()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::addClient()
{
id++;
user[id].socket = server->nextPendingConnection();
user[id].ip = user[id].socket->peerAddress().toString();
connect(user[id].socket,SIGNAL(readyRead()),this,SLOT(Read()));
}
void MainWindow::Read()
{
}
Każdy client, który nawiąże połączenie z serwerem dostanie swoją klasę 'user', w której w skład wchodzi socket i zmienna na ip. Następnie jest wywoływana funkcja connect(user[id].socket,SIGNAL(readyRead()),this,SLOT(Read())), która mniej więcej sprawdza czy dany client wysłał jakiś pakiet.
Przejdźmy teraz do sedna mego problemu:
Kiedy jakiś client wyśle pakiet na serwer, to zostanie wywołany slot Read(), lecz niestety nie będzie wiadomo który konkretnie client go wysłał.
Ktoś ma jakiś pomysł, aby w slocie Read() było wiadomo, który konkretnie socket wysłał pakiet?
Z góry dziękuje za pomoc.
Hehe, wygląda na to, że się trochę rozpisałem. Mam nadzieje, że wam to nie przeszkadza. :)