Мы бы затем могли обрабатывать каждую считанную строку. Пересылка данных могла бы выполняться с использованием
Представленная здесь реализация сервера не очень эффективна в случае, когда соединений много. Это объясняется тем, что при обработке нами одного запроса мы не обслуживаем другие соединения. Более эффективным был бы запуск нового процесса для каждого соединения. Пример 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 };
Класс
01 WeatherBalloon::WeatherBalloon(QWidget *parent)
02 : QPushButton(tr("Quit"), parent)
03 {
03 connect(this, SIGNAL(clicked), this, SLOT(close));
04 connect(&timer, SIGNAL(timeout), this, SLOT(sendDatagram));
05 timer.start(2 * 1000);
06 setWindowTitle(tr("Weather Balloon"));
07 }
В конструкторе мы запускаем
01 void WeatherBalloon::sendDatagram
02 {
03 QByteArray datagram;
04 QDataStream out(&datagram, QIODevice::WriteOnly);
05 out.setVersion(QDataStream::Qt_4_1);
06 out << QDateTime::currentDateTime << temperature
07 << humidity << altitude;
08 udpSocket.writeDatagram(datagram, QHostAddress::LocalHost, 5824);
09 }
В
Эта дейтаграмма отсылается функцией