Справочник от Автор24
Поделись лекцией за скидку на Автор24

Сеть и работа с WEB

  • 👀 181 просмотр
  • 📌 127 загрузок
Выбери формат для чтения
Загружаем конспект в формате pptx
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «Сеть и работа с WEB» pptx
Qt: Сеть и работа с WEB 1 Сетевое взаимодействие Qt ● QNetworkAccessManager - интерфейс для отправки и получения запросов по сети ○ QFtp ○ QHttp ● QTcpSocket и QTcpServer - ТСР сокеты ○ QSslSocket - шифрованный ТСР сокет ● QUdpSocket - доступ к UDP сокетам ● QWebSocket - web протокол для обмена информацией между клиентом и сервером 2 Подключение модулей ● Файл проекта QT += network ● Заголовочный файл #include 3 Низкоуровневы е протоколы TCP UDP непрерывная передача данных передача пакетов данных гарантированный порядок доставки пакетов отправил и забыл пересылка только между сокетами (точка-точка) точка-точка или широковещательные сообщения Идеален когда важна аккуратная доставка данных Идеален, когда время важнее качества доставки 4 ТСР сокеты ● два класса сокетов ○ QTcpSocket - реализует сокет ○ QTcpServer - реализует сервер, прослушивающий соединения и создающий сокет QTcpSocket для каждого соединения 5 ТСР сокеты . Порядок работы 6 ТСР сервер. Пример прослушивает порт 55555 и посылает сигнал newConnection при новом соединении Server::Server() : QObject(0) { m_tcpServer = new QTcpServer(this); connect(m_tcpServer, SIGNAL(newConnection()), this, SLOT(serverConnected())); m_tcpServer->listen(QHostAddress::Any, 55555); } 7 ТСР сервер. Пример получить соединение nextPendingConnection void Server::serverConnected(){ QTcpSocket *connection= m_tcpServer->nextPendingConnection(); connect(connection, SIGNAL(disconnected()), connection, SLOT(deleteLater())); QByteArray buffer;//Ответ помещается в буфер: //… см.40 connection->write(buffer); connection->disconnectFromHost(); } 8 ТСР сервер. Пример получить соединение nextPendingConnection void Server::serverConnected(){ ... QByteArray buffer;//Ответ помещается в буфер: QDataStream out(&buffer, QIODevice::WriteOnly); out.setVersion(QDataStream::Qt_4_6); QString greeting = QString("Hello! The time is %1") .arg(QTime::currentTime().toString()); out << (quint16)0; out << greeting; out.device()->seek(0); out << (quint16)(buffer.size() - sizeof(quint16)); ... } 9 ТСР клиент. Пример ● Используем QTcpSocket для подключения к серверу ○ сигнал readyRead Сlient::Client() : QObject(0) { m_tcpSocket = new QTcpSocket(this); connect(m_tcpSocket, SIGNAL(readyRead()), this, SLOT(readyToRead())); m_tcpSocket->connectToHost("localhost", 55555); } 10 ТСР клиент. Пример void Client::readyToRead(){ QDataStream in(m_tcpSocket); in.setVersion(QDataStream::Qt_4_6); if(m_tcpBlockSize == 0){ if(m_tcpSocket->bytesAvailable()> m_tcpBlockSize; } if(m_tcpSocket->bytesAvailable() < m_tcpBlockSize) return; QString greeting; in >> greeting; doSomething(greeting); m_tcpBlockSize = 0; } 11 UDP сокет ● класс QUdpSocket ○ используются как клиентами так и сервером ○ UDP - User Datagram Protocol ● Датаграмма - блок данных, пересылаемый за один раз ○ ○ ○ ○ с большими объемами могут быть проблемы данные могут дойти, а могут и нет данные могут прийти в не том порядке данные могут дублироваться 12 UDP сокет. Пример void Server::initSocket() { udpSocket = new QUdpSocket(this); udpSocket->bind(QHostAddress::LocalHost, 7755); connect(udpSocket, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams())); } void Server::readPendingDatagrams() { while (udpSocket->hasPendingDatagrams()) { QNetworkDatagram datagram = udpSocket->receiveDatagram(); processTheDatagram(datagram); } } 13 WEB сокеты #include QT += websockets ● Клиент- серверное взаимодействие по протоколу WebSocket ○ ws://host:port ● Передача данных в реальном времени ● Небольшой объем данных ● на основе TCP cокетов ○ QWebSocketServer – QTcpServer ○ QWebSocket – QTcpSocket 14 WEB сокеты . Подключение #include QT += websockets 15 SSL сокеты ● шифрование поверх ТСР-сокета ● поддерживает протоколы SSL 3 and TLS 1.2. Установка зашифрованного соединения ● сразу - при создании совета ● отложенное - после установки соединения в не зашифрованном режиме 16 SSL сокеты . Использование ● создать объект QSslSocket ○ QSslSocket *socket = new QSslSocket(this); connect(socket, SIGNAL(encrypted()), this, SLOT(ready())); ● создать безопасное соединение ○ socket->connectToHostEncrypted("imap.example.com", 993) ● записать данные в сокет 17 SSL сокеты . Использование ● создать объект QSslSocket для входящего соединения ● установить зашифрованный канал void SslServer::incomingConnection(qintptr socketDescriptor){ QSslSocket *serverSocket = new QSslSocket; if (serverSocket->setSocketDescriptor(socketDescriptor)) { addPendingConnection(serverSocket); connect(serverSocket, &QSslSocket::encrypted, this, &SslServer::ready); serverSocket->startServerEncryption(); } else { delete serverSocket; } } 18 Протоколы вы сокого уровня ● ● ● ● ● HTTP, FTP ○ класс QHttp, QFtp ○ рекомендуется использовать QNetworkAccessManager Создать объект QNetworkAccessManager Вызвать нужную функцию (get(), post(), head(), post()) и передать в нее объект QNetworkRequest содержащий адрес URL Получить ответ в объекте QNetworkReply Если нужно настроить прокси сервер ( setProxy()) и временные файлы (setCookieJar()) 19 Пример. Скачивание файла QNetworkAccessManager *manager = new QNetworkAccessManager(this); connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(downloadDone(QNetworkReply*))); manager->get( QNetworkRequest(QUrl("http://doc.qt.io/images/logo.png"))); MyClass::downloadDone(QNetworkReply *reply) { QImageReader reader(reply, "png"); mImage = reader.read()); emit imageChanged(mImage); reply->deleteLater(); } 20 Запросы ● класс QNetworkRequest - запрос ○ экземпляр передается в методы QNetworkAccessManager ○ используют QUrl в качестве аргумента ○ SSL - setSSLConfiguration() ○ Настройка заголовков ■ setHeader(KnownHeaders headerName, QVariant headerValue) ■ setRawHeader(QByteArray headerName, QByteArray headerValue 21 Ответы ● класс QNetworkReply - ответ ○ методы QNetworkAccessManager асинхронные ○ возвращают экземпляр QNetworkReply ○ Сигналы завершения выполнения операции ■ QNetworkReply::finished() ■ QNetworkAccessManager::finished(QNetworkReply*) ○ Состояние ■ downloadProgress(qint64, qint64) ■ uploadProgress() ○ Ошибки - error(NetworkError) 22 Структура адреса URL ● класс QUrl QUrl url("ftp://ftp.qt.nokia.com/qt/sources/README"); QString host = url.host(); QString path = url.path(); 23 Резюме ● Qt Network предоставляет классы для работы с сетью ○ UDP сокеты ○ TCP сокеты ○ SSL сокеты ○ средства разрешения адресов (host resolving) ● для HTTP и FTP следует использовать QNetworkAccessManager ○ QHttp и QFtp еще поддерживаются в Qt5 как дополнительные модуль ● QNetworkAccessManager можно использовать для любых типов сетевых запросов и обработки ответов 24
«Сеть и работа с WEB» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Помощь с рефератом от нейросети
Написать ИИ

Тебе могут подойти лекции

Смотреть все 588 лекций
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot