Редактирование: Qt:Документация 4.3.2/qtnetwork

Материал из Wiki.crossplatform.ru

Перейти к: навигация, поиск
Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 1: Строка 1:
{{Qt4.3.2_header}}
{{Qt4.3.2_header}}
-
[Назад: [[Qt:Документация 4.3.2/qtgui | Модуль QtGui]] ] [ [[Qt:Документация 4.3.2/modules | Qt's Модули ]] ] [Далее: [[Qt:Документация 4.3.2/qtopengl | Модуль QtOpenGL]] ]  
+
[Назад: [[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'ях
|}
|}
-
<div id="details"></div>
+
 
==Детальное описание==
==Детальное описание==
Модуль работы с сетью, предоставляет классы, которые помогают сделать сетевое программирование проще и переносимей. Он предлагает как классы высокого уровня, такие как [[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]].
-
Темы:
 
-
 
-
*[[#configuring-the-build-process | Конфигурирование процесса сборки]]
 
-
*[[#writing-http-and-ftp-clients-with-qhttp-and-qftp | Написание  HTTP и FTP клиентов с помощью классов QHttp и QFtp]]
 
-
*[[#using-tcp-with-qtcpsocket-and-qtcpserver | Использование TCP с помощью классов QTcpSocket и QTcpServer]]
 
-
*[[#using-udp-with-qudpsocket | Использование  UDP с помощью класса QUdpSocket]]
 
-
*[[#resolving-host-names-using-qhostinfo | Получение имен компьютеров используя класс QHostInfo]]
 
-
<div id="configuring-the-build-process"></div>
 
===Конфигурирование процесса сборки===
===Конфигурирование процесса сборки===
Приложения, которые используют сетевые классы Qt, нужно сконфигурировать, чтобы их можно было собрать с модулем QtNetwork. Следующая декларация в файле проекта qmake гарантирует, что приложение будет собрано и связано с данным модулем:
Приложения, которые используют сетевые классы Qt, нужно сконфигурировать, чтобы их можно было собрать с модулем QtNetwork. Следующая декларация в файле проекта qmake гарантирует, что приложение будет собрано и связано с данным модулем:
Строка 101: Строка 93:
Чтобы включить определения классов данного модуля, используйте следующую директиву:
Чтобы включить определения классов данного модуля, используйте следующую директиву:
-
<source lang="cpp-qt"> #include <QtNetwork></source> <div id="writing-http-and-ftp-clients-with-qhttp-and-qftp"></div>
+
<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]] асинхронны. Вы можете отправить ряд команд ("requests" для HTTP). Команды выполнятся позже, когда управление вернется к циклу событий Qt.  
+
*''Не блокирующее поведение .'' [[Qt:Документация 4.3.2/qhttp | QHttp]] и [[Qt:Документация 4.3.2/qftp | QFtp]] асинхронны. Вы можете отправить ряд команд (&quot;requests&quot; для 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]].
-
<div id="using-tcp-with-qtcpsocket-and-qtcpserver"></div>
+
 
===Использование 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 потоке, то это может "заморозить" пользовательский интерфейс приложения. Поэтому мы рекомендуем использовать синхронные сокеты только в не GUI потоках. [[Qt:Документация 4.3.2/qtcpsocket | QTcpSocket]] при синхронном использовании не требует цикла событий.  
+
Использование синхронных сокетов часто приводит к более простому коду. Главное неудобство waitFor ... () подхода состоит в том, что события не будут обрабатываться, пока поток блокируется функцией waitFor ... (). Если использовать в  GUI потоке, то это может &quot;заморозить&quot; пользовательский интерфейс приложения. Поэтому мы рекомендуем использовать синхронные сокеты только в не 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 сервера, с одним потоком на каждого клиента.
-
<div id="using-udp-with-qudpsocket"></div>
+
 
===Использование  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.
-
<div id="resolving-host-names-using-qhostinfo"></div>
+
 
===Получение имен компьютеров используя класс 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/modules | Qt's Modules]] ] [Далее: [[Qt:Документация 4.3.2/qtopengl | QtOpenGL 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}}

Пожалуйста, обратите внимание, что все ваши добавления могут быть отредактированы или удалены другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Wiki.crossplatform.ru:Авторское право). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!


Шаблоны, использованные на текущей версии страницы: