Редактирование: Qt:Документация 4.3.2/qtnetwork
Материал из Wiki.crossplatform.ru
Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 1: | Строка 1: | ||
{{Qt4.3.2_header}} | {{Qt4.3.2_header}} | ||
- | [Назад: [[Qt:Документация 4.3.2/qtgui | | + | [Назад: [[Qt:Документация 4.3.2/qtgui | QtGui Module]]] [ [[Qt:Документация 4.3.2/modules | Qt's Modules]] ][Далее: [[Qt:Документация 4.3.2/qtopengl | QtOpenGL Module]]] |
=Модуль QtNetwork<br />= | =Модуль QtNetwork<br />= | ||
Строка 81: | Строка 81: | ||
|Хранилище информации о URL'ях | |Хранилище информации о URL'ях | ||
|} | |} | ||
- | + | ||
==Детальное описание== | ==Детальное описание== | ||
Модуль работы с сетью, предоставляет классы, которые помогают сделать сетевое программирование проще и переносимей. Он предлагает как классы высокого уровня, такие как [[Qt:Документация 4.3.2/qhttp | QHttp]] и [[Qt:Документация 4.3.2/qftp | QFtp]], которые имплементируют специфичные протоколы уровня приложений, и классы низкого уровня, такие как [[Qt:Документация 4.3.2/qtcpsocket | QTcpSocket]], [[Qt:Документация 4.3.2/qtcpserver | QTcpServer]], и [[Qt:Документация 4.3.2/qudpsocket | QUdpSocket]]. | Модуль работы с сетью, предоставляет классы, которые помогают сделать сетевое программирование проще и переносимей. Он предлагает как классы высокого уровня, такие как [[Qt:Документация 4.3.2/qhttp | QHttp]] и [[Qt:Документация 4.3.2/qftp | QFtp]], которые имплементируют специфичные протоколы уровня приложений, и классы низкого уровня, такие как [[Qt:Документация 4.3.2/qtcpsocket | QTcpSocket]], [[Qt:Документация 4.3.2/qtcpserver | QTcpServer]], и [[Qt:Документация 4.3.2/qudpsocket | QUdpSocket]]. | ||
Строка 87: | Строка 87: | ||
Модуль QtNetwork является частью [[Qt:Документация 4.3.2/commercialeditions#qt-console-edition | Qt Console Edition]], [[Qt:Документация 4.3.2/commercialeditions#qt-desktop-edition | Qt Desktop Edition]], и [[Qt:Документация 4.3.2/opensourceedition | Qt Open Source Edition]]. | Модуль QtNetwork является частью [[Qt:Документация 4.3.2/commercialeditions#qt-console-edition | Qt Console Edition]], [[Qt:Документация 4.3.2/commercialeditions#qt-desktop-edition | Qt Desktop Edition]], и [[Qt:Документация 4.3.2/opensourceedition | Qt Open Source Edition]]. | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
===Конфигурирование процесса сборки=== | ===Конфигурирование процесса сборки=== | ||
Приложения, которые используют сетевые классы Qt, нужно сконфигурировать, чтобы их можно было собрать с модулем QtNetwork. Следующая декларация в файле проекта qmake гарантирует, что приложение будет собрано и связано с данным модулем: | Приложения, которые используют сетевые классы Qt, нужно сконфигурировать, чтобы их можно было собрать с модулем QtNetwork. Следующая декларация в файле проекта qmake гарантирует, что приложение будет собрано и связано с данным модулем: | ||
Строка 101: | Строка 93: | ||
Чтобы включить определения классов данного модуля, используйте следующую директиву: | Чтобы включить определения классов данного модуля, используйте следующую директиву: | ||
- | <source lang="cpp-qt"> #include <QtNetwork></source | + | <source lang="cpp-qt"> #include <QtNetwork></source> |
===Написание HTTP и FTP клиентов с помощью классов QHttp и QFtp=== | ===Написание HTTP и FTP клиентов с помощью классов QHttp и QFtp=== | ||
HTTP (Hypertext Transfer Protocol) является протоколом сети прикладного уровня, который используется главным образом для того, чтобы загружать HTML и XML файлы, а также как транспортный протокол высокого уровня для многих других типов данных, от картинок и кинофильмов, до заказов на поставку и банковским операциям. FTP (File Transfer Protocol) используется исключительно для просмотра удаленных директорий и для передачи файлов. | HTTP (Hypertext Transfer Protocol) является протоколом сети прикладного уровня, который используется главным образом для того, чтобы загружать HTML и XML файлы, а также как транспортный протокол высокого уровня для многих других типов данных, от картинок и кинофильмов, до заказов на поставку и банковским операциям. FTP (File Transfer Protocol) используется исключительно для просмотра удаленных директорий и для передачи файлов. | ||
Строка 113: | Строка 105: | ||
Классы [[Qt:Документация 4.3.2/qhttp | QHttp]] и [[Qt:Документация 4.3.2/qftp | QFtp]] предоставляют поддержку протоколов HTTP и FTP на клиентской стороне. Так как эти два протокола используются для решении похожих задач, [[Qt:Документация 4.3.2/qhttp | QHttp]] и [[Qt:Документация 4.3.2/qftp | QFtp]] классы имеют много общих особенностей: | Классы [[Qt:Документация 4.3.2/qhttp | QHttp]] и [[Qt:Документация 4.3.2/qftp | QFtp]] предоставляют поддержку протоколов HTTP и FTP на клиентской стороне. Так как эти два протокола используются для решении похожих задач, [[Qt:Документация 4.3.2/qhttp | QHttp]] и [[Qt:Документация 4.3.2/qftp | QFtp]] классы имеют много общих особенностей: | ||
- | *''Не блокирующее поведение .'' [[Qt:Документация 4.3.2/qhttp | QHttp]] и [[Qt:Документация 4.3.2/qftp | QFtp]] асинхронны. Вы можете отправить ряд команд ( | + | *''Не блокирующее поведение .'' [[Qt:Документация 4.3.2/qhttp | QHttp]] и [[Qt:Документация 4.3.2/qftp | QFtp]] асинхронны. Вы можете отправить ряд команд ("requests" для HTTP). Команды выполнятся позже, когда управление вернется к циклу событий Qt. |
*''ID команд.'' Каждая команда имеет свой уникальный номер ID, который используется для слежения за выполнением команд. Например, [[Qt:Документация 4.3.2/qftp | QFtp]] передает [[Qt:Документация 4.3.2/qftp#commandStarted | commandStarted()]] и [[Qt:Документация 4.3.2/qftp#commandFinished | commandFinished()]] сигналы с ID для каждой команды, которая выполняется или выполнена. У [[Qt:Документация 4.3.2/qhttp | QHttp]] тоже имеются подобные сигнылы [[Qt:Документация 4.3.2/qhttp#requestStarted | requestStarted()]] и [[Qt:Документация 4.3.2/qhttp#requestFinished | requestFinished()]]. | *''ID команд.'' Каждая команда имеет свой уникальный номер ID, который используется для слежения за выполнением команд. Например, [[Qt:Документация 4.3.2/qftp | QFtp]] передает [[Qt:Документация 4.3.2/qftp#commandStarted | commandStarted()]] и [[Qt:Документация 4.3.2/qftp#commandFinished | commandFinished()]] сигналы с ID для каждой команды, которая выполняется или выполнена. У [[Qt:Документация 4.3.2/qhttp | QHttp]] тоже имеются подобные сигнылы [[Qt:Документация 4.3.2/qhttp#requestStarted | requestStarted()]] и [[Qt:Документация 4.3.2/qhttp#requestFinished | requestFinished()]]. | ||
*''Индикаторы процесса передачи данных.'' [[Qt:Документация 4.3.2/qhttp | QHttp]] и [[Qt:Документация 4.3.2/qftp | QFtp]] используют сигналы при передаче данных ([[Qt:Документация 4.3.2/qftp#dataTransferProgress | QFtp::dataTransferProgress]](), [[Qt:Документация 4.3.2/qhttp#dataReadProgress | QHttp::dataReadProgress]](), и [[Qt:Документация 4.3.2/qhttp#dataSendProgress | QHttp::dataSendProgress]]()). Вы можете соединить данные сигналы например с QProgressBar::setProgress() или QProgressDialog::setProgress(). | *''Индикаторы процесса передачи данных.'' [[Qt:Документация 4.3.2/qhttp | QHttp]] и [[Qt:Документация 4.3.2/qftp | QFtp]] используют сигналы при передаче данных ([[Qt:Документация 4.3.2/qftp#dataTransferProgress | QFtp::dataTransferProgress]](), [[Qt:Документация 4.3.2/qhttp#dataReadProgress | QHttp::dataReadProgress]](), и [[Qt:Документация 4.3.2/qhttp#dataSendProgress | QHttp::dataSendProgress]]()). Вы можете соединить данные сигналы например с QProgressBar::setProgress() или QProgressDialog::setProgress(). | ||
Строка 123: | Строка 115: | ||
Для написания собственного HTTP или FTP сервера понадобиться использование классов низкого уровня [[Qt:Документация 4.3.2/qtcpsocket | QTcpSocket]] и [[Qt:Документация 4.3.2/qtcpserver | QTcpServer]]. | Для написания собственного HTTP или FTP сервера понадобиться использование классов низкого уровня [[Qt:Документация 4.3.2/qtcpsocket | QTcpSocket]] и [[Qt:Документация 4.3.2/qtcpserver | QTcpServer]]. | ||
- | + | ||
===Использование TCP с помощью классов QTcpSocket и QTcpServer=== | ===Использование TCP с помощью классов QTcpSocket и QTcpServer=== | ||
TCP (Transmission Control Protocol) является сетевым протоколом низкого уровня, используемым в соответствии с большинством интернет-протоколов, включая HTTP и FTP, для передачи данных. Это - надежный, stream-oriented или connection-oriented транспортный протокол. Он особенно хорошо подходит для непрерывной передачи данных. | TCP (Transmission Control Protocol) является сетевым протоколом низкого уровня, используемым в соответствии с большинством интернет-протоколов, включая HTTP и FTP, для передачи данных. Это - надежный, stream-oriented или connection-oriented транспортный протокол. Он особенно хорошо подходит для непрерывной передачи данных. | ||
Строка 141: | Строка 133: | ||
Хотя большинство его функций работает асинхронно, возможно синхронное использование [[Qt:Документация 4.3.2/qtcpsocket | QTcpSocket]] (в блокирующем режиме). Чтобы установить блокирующий режим вызовите функции [[Qt:Документация 4.3.2/qtcpsocket | QTcpSocket]] waitFor...(); они приостанавливают выполнение потока до тех пор, пока не будет получен сигнал. Например, после вызова не блокирующей функции [[Qt:Документация 4.3.2/qabstractsocket#connectToHost | QTcpSocket::connectToHost]](), вызовите [[Qt:Документация 4.3.2/qabstractsocket#waitForConnected | QTcpSocket::waitForConnected]](), чтобы блокировать поток до получения сигнала [[Qt:Документация 4.3.2/qabstractsocket#connected | connected()]]. | Хотя большинство его функций работает асинхронно, возможно синхронное использование [[Qt:Документация 4.3.2/qtcpsocket | QTcpSocket]] (в блокирующем режиме). Чтобы установить блокирующий режим вызовите функции [[Qt:Документация 4.3.2/qtcpsocket | QTcpSocket]] waitFor...(); они приостанавливают выполнение потока до тех пор, пока не будет получен сигнал. Например, после вызова не блокирующей функции [[Qt:Документация 4.3.2/qabstractsocket#connectToHost | QTcpSocket::connectToHost]](), вызовите [[Qt:Документация 4.3.2/qabstractsocket#waitForConnected | QTcpSocket::waitForConnected]](), чтобы блокировать поток до получения сигнала [[Qt:Документация 4.3.2/qabstractsocket#connected | connected()]]. | ||
- | Использование синхронных сокетов часто приводит к более простому коду. Главное неудобство waitFor ... () подхода состоит в том, что события не будут обрабатываться, пока поток блокируется функцией waitFor ... (). Если использовать в GUI потоке, то это может | + | Использование синхронных сокетов часто приводит к более простому коду. Главное неудобство waitFor ... () подхода состоит в том, что события не будут обрабатываться, пока поток блокируется функцией waitFor ... (). Если использовать в GUI потоке, то это может "заморозить" пользовательский интерфейс приложения. Поэтому мы рекомендуем использовать синхронные сокеты только в не GUI потоках. [[Qt:Документация 4.3.2/qtcpsocket | QTcpSocket]] при синхронном использовании не требует цикла событий. |
В примерах [[Qt:Документация 4.3.2/network-fortuneclient | Fortune Client]] и [[Qt:Документация 4.3.2/network-fortuneserver | Fortune Server]] показано как использовать [[Qt:Документация 4.3.2/qtcpsocket | QTcpSocket]] и [[Qt:Документация 4.3.2/qtcpserver | QTcpServer]] для написания TCP client-server приложений. Также смотрите [[Qt:Документация 4.3.2/network-blockingfortuneclient | Blocking Fortune Client]] в качестве примера использования синхронного [[Qt:Документация 4.3.2/qtcpsocket | QTcpSocket]] в отдельном потоке (не используя цикл событий) и [[Qt:Документация 4.3.2/network-threadedfortuneserver | Threaded Fortune Server]] в качестве примера мульти поточного TCP сервера, с одним потоком на каждого клиента. | В примерах [[Qt:Документация 4.3.2/network-fortuneclient | Fortune Client]] и [[Qt:Документация 4.3.2/network-fortuneserver | Fortune Server]] показано как использовать [[Qt:Документация 4.3.2/qtcpsocket | QTcpSocket]] и [[Qt:Документация 4.3.2/qtcpserver | QTcpServer]] для написания TCP client-server приложений. Также смотрите [[Qt:Документация 4.3.2/network-blockingfortuneclient | Blocking Fortune Client]] в качестве примера использования синхронного [[Qt:Документация 4.3.2/qtcpsocket | QTcpSocket]] в отдельном потоке (не используя цикл событий) и [[Qt:Документация 4.3.2/network-threadedfortuneserver | Threaded Fortune Server]] в качестве примера мульти поточного TCP сервера, с одним потоком на каждого клиента. | ||
- | + | ||
===Использование UDP с помощью класса QUdpSocket=== | ===Использование UDP с помощью класса QUdpSocket=== | ||
UDP (User Datagram Protocol) легкий, ненадежный, датаграмм ориентированный протокол, не требующий установки соединения. Он может быть использован, когда не важна надежность. Например, сервер сообщающий время может использовать UDP. Если датаграма с временем потеряна, клиент просто может сделать новый запрос. | UDP (User Datagram Protocol) легкий, ненадежный, датаграмм ориентированный протокол, не требующий установки соединения. Он может быть использован, когда не важна надежность. Например, сервер сообщающий время может использовать UDP. Если датаграма с временем потеряна, клиент просто может сделать новый запрос. | ||
Строка 157: | Строка 149: | ||
[[Qt:Документация 4.3.2/network-broadcastsender | Broadcast Sender]] и [[Qt:Документация 4.3.2/network-broadcastreceiver | Broadcast Receiver]] примеры показывающие как написать UDP отправитель и UDP получатель используя Qt. | [[Qt:Документация 4.3.2/network-broadcastsender | Broadcast Sender]] и [[Qt:Документация 4.3.2/network-broadcastreceiver | Broadcast Receiver]] примеры показывающие как написать UDP отправитель и UDP получатель используя Qt. | ||
- | + | ||
===Получение имен компьютеров используя класс QHostInfo=== | ===Получение имен компьютеров используя класс QHostInfo=== | ||
Перед установкой сетевого соединения, [[Qt:Документация 4.3.2/qtcpsocket | QTcpSocket]] и [[Qt:Документация 4.3.2/qudpsocket | QUdpSocket]] выполняет поиск имени, переводя имя компьютера, с которым соединяется в IP адрес. Эта операция обычно выполняется с помощью DNS протокола (Domain Name Service). | Перед установкой сетевого соединения, [[Qt:Документация 4.3.2/qtcpsocket | QTcpSocket]] и [[Qt:Документация 4.3.2/qudpsocket | QUdpSocket]] выполняет поиск имени, переводя имя компьютера, с которым соединяется в IP адрес. Эта операция обычно выполняется с помощью DNS протокола (Domain Name Service). | ||
Строка 165: | Строка 157: | ||
[[Qt:Документация 4.3.2/qhostinfo | QHostInfo]] также предоставляет статическую функцию [[Qt:Документация 4.3.2/qhostinfo#fromName | QHostInfo::fromName]](), которая в качестве аргумента получает имя компьютера и возвращает результат. В этом случае, поиск имени происходит в том же потоке, где была вызвана данная функция. Эта перегрузка полезна в не-GUI приложениях или для поиска имени отдельно от не-GUI потока. (При вызове данной функции в GUI потоке, пользовательский интерфейс не будет отвечать пока функция выполняет поиск.) | [[Qt:Документация 4.3.2/qhostinfo | QHostInfo]] также предоставляет статическую функцию [[Qt:Документация 4.3.2/qhostinfo#fromName | QHostInfo::fromName]](), которая в качестве аргумента получает имя компьютера и возвращает результат. В этом случае, поиск имени происходит в том же потоке, где была вызвана данная функция. Эта перегрузка полезна в не-GUI приложениях или для поиска имени отдельно от не-GUI потока. (При вызове данной функции в GUI потоке, пользовательский интерфейс не будет отвечать пока функция выполняет поиск.) | ||
- | [Назад: [[Qt:Документация 4.3.2/qtgui | QtGui Module]] ] | + | [Назад: [[Qt:Документация 4.3.2/qtgui | QtGui Module]]] [ [[Qt:Документация 4.3.2/modules | Qt's Modules]] ][Далее: [[Qt:Документация 4.3.2/qtopengl | QtOpenGL Module]]] |
{{Qt4.3.2_footer}} | {{Qt4.3.2_footer}} |