Функция
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());
Мы бы затем могли обрабатывать каждую считанную строку. Пересылка данных могла бы выполняться с использованием
Представленная здесь реализация сервера не очень эффективна в случае, когда соединений много. Это объясняется тем, что при обработке нами одного запроса мы не обслуживаем другие соединения. Более эффективным был бы запуск нового процесса для каждого соединения. Пример Threaded Fortune Server (многопоточный сервер, передающий клиентам интересные изречения, называемые «fortunes»), расположенный в каталоге Qt
Передача и прием дейтаграмм UDP
Класс
Мы рассмотрим способы применения UDP в приложении Qt на примере приложений Weather Balloon (метеозонд) и Weather Station (метеостанция). Приложение Weather Balloon является приложением без графического интерфейса, которое посылает каждые 2 секунды дейтаграммы UDP с параметрами текущего атмосферного состояния. Приложение Weather Station получает эти дейтаграммы и выводит их на экран. Мы начнем с рассмотрения программного кода приложения Weather Balloon.
01 class WeatherBalloon : public QPushButton
02 {
03 Q_OBJECT
04 public:
05 WeatherBalloon(QWidget *parent = 0);
06 double temperature() const;
07 double humidity() const;
08 double altitude() const;
09 private slots:
10 void sendDatagram();
11 private:
12 QUdpSocket udpSocket;
13 QTimer timer;
14 };
Класс