20 in >> from >> to >> date >> time >> flag;
21 srand(from.length * 3600 + to.length * 60 + time.hour);
22 int numTrips = rand % 8;
23 for (int i = 0; i < numTrips; ++i)
24 generateRandomTrip(from, to, date, time);
25 QDataStream out(this);
26 out << quint16(0xFFFF);
27 }
28 close;
29 }
Слот
После чтения запроса клиента мы готовы сформировать ответ. В реальном приложении мы осуществляли бы поиск информации в базе данных расписания железнодорожных рейсов и попытались бы найти подходящие рейсы. Но здесь мы воспользуемся функцией
01 void ClientSocket::generateRandomTrip(const QString & /* откуда */,
02 const QString & /* куда */, const QDate &date, const QTime &time)
03 {
04 QByteArray block;
05 QDataStream out(█, QIODevice::WriteOnly);
06 out.setVersion(QDataStream::Qt_4_1);
07 quint16 duration = rand % 200;
08 out << quint16(0) << date << time << duration << quint8(1)
09 << QString("InterCity");
10 out.device->seek(0);
11 out << quint16(block.size - sizeof(quint16));
12 write(block);
13 }
Функция
01 int main(int argc, char *argv[])
02 {
03 QApplication app(argc, argv);
04 TripServer server;
05 if (!server.listen(QHostAddress::Any, 6178)) {
06 cerr << "Failed to bind to port" << endl;
07 return 1;
08 }
09 QPushButton quitButton(QObject::tr("&Quit"));
10 quitButton.setWindowTitle(QObject::tr("Trip Server"));
11 QObject::connect(&quitButton, SIGNAL(clicked),
12 &app, SLOT(quit));
13 quitButton.show;
14 return app.exec;
15 }
В функции
Этим завершается наш пример системы клиент—сервер. В данном случае нами использовался блокоориентированный протокол, позволяющий применять объект типа
QStringList lines;
while (tcpSocket.canReadLine)
lines.append(tcpSocket.readLine);