Você está na página 1de 61

Networking

<beto.corujao@gmail.com>

Robert Diego de Jesus


<ruypreto@gmail.com>

Ruy Francisco Almeida

ndice

Introduo Criando uma Conexo FTP Criando uma Conexo HTTP Criando Aplicaes cliente-servidor com TCP Enviando e Recebendo datagramas UDP

Introduo

O QT permite que trabalhemos com os protocolos FTP e HTTP. Os protocolos FTP permitem o download e upload de arquivos para uma mquina que funcione com servidor. Os protocolos HTTP so usados normalmente para o envio de pedidos de servidores web e recuperao dos resultados. Para isso disponibiliza as classes QFtp e QHttp (provenientes de QNetwork).

Introduo

Qt tambm prov as classes QTcpSocket e QUdpSocket, que implementam os protocolos de transporte TCP e UDP. Com estes dois protocolos aplicaes cliente-servidor. possvel criar

TCP um protocolo da camada de transporte, orientado a conexo, que permite a transferncia de dados entre os ns da rede. UDP prov um servio sem conexo no confivel, usando IP para transportar mensagens entre duas

Introduo

No caso de servidores precisamos da classe QTcpServer para lidar com conexes TCP. J conexes seguras podem ser estabelecidas com a classe QSslSocket ao invs de QtcpSocket.

Criando uma Conexo FTP

A classe QFtp implementa o lado cliente do protocolo FTP no Qt. A classe QFtp trabalha de forma assncrona para que no haja funes de bloqueio. Quando chamamos funes como get() e put(), por exemplo, estas funes retornam imediatamente mas a sua operao ser agendada para uma execuo posterior.

Criando uma Conexo FTP

Isso garante que a interface do usurio continuar respondendo enquanto os comandos FTP so executados. Os resultados das operaes programadas so relatados atravs de sinais. Esta abordagem depende do ciclo de eventos estar em operao.

Criando uma Conexo FTP

A classe QFtp prov muitos comandos FTP: connectToHost(), login(), close(), list(), cd(), get(), put(), remove(), mkdir(), rmdir(), rename() e rawCommand(). So comandos agendveis do FTP que retornam um ID que identifica o comando. Tambm possvel definir o modo e tipo de transferncia (passivo e binrio como default, respectivamente).

Criando uma Conexo FTP

Quando a execuo de um comando iniciado, o sinal commandStarted() com o ID do comando emitido. Quando o comando terminado, o sinal commandFinished() emitido com o ID do comando e um bool que indica se o comando terminou com um erro ou com xito.

Criando uma Conexo FTP

Exemplo:

Um novo exemplo ser construdo utilizando a classe QCoreAplication, que nos permite trabalhar com aplicativos de console.

Criando uma Conexo FTP

Criando uma Conexo FTP

A classe FtpGet tem uma funo pblica, GetFile(), que recupera o arquivo especificado por uma URL. A classe Qurl prov uma interface de alto nvel para extrair as diferentes partes de uma URL, como o nome do arquivo, caminho, protocolo e porta. O Slot ftpDone() chamado quando a Transferncia completada, emitindo A varivel privada ftp: encapsula a um sinaldone() ao baixar o arquivo. conexo um servidor FTP. A varivel Privada file: usada para escrever o arquivo baixado em disco.

Criando uma Conexo FTP


No construtor, conectou-se o sinal QFtp::done(bool) ao slot privado ftpDone(bool). QFtp emite done(bool) quando terminou de processar todas requisies. O parmetro bool indica se um erro ocorreu ou no.

Criando uma Conexo FTP

Criando uma Conexo FTP

Url a ser a acessada: porta de acesso Nmero da ftp://127.0.0.1 - servidor ftp (padro: 21) ao (localhost) const QString &user, const QString &password

int Qftp::get(const QString &file, QIODevice *dev = 0, TransferType type = Binary)

Criando uma Conexo FTP

Criando uma Conexo FTP

Outro jeito de prover feedback conectar o sinal stateChanged(), de QFtp, que emitido a qualquer momento que a conexo entrar em um novo estado(QFtp::Connecting, QFtp::Connected, QFtp::Logging etc.)

Criando uma Conexo FTP


void FtpGet::ftpCommandStarted(int id){ if (id == connectId) { std::cerr << "Connecting..." << std::endl; } else if (id == loginId) { std::cerr << "Logging in..." << std::endl; ... }

Criando uma Conexo FTP

Em arquivos de aplicaes '.pro', ns precisamos da seguinte linha para linkar a biblioteca : QtNetwork: QT+= network

Criando uma Conexo FTP Exemplo em Janela

Criando uma Conexo HTTP


A classe QHttp implementa o lado cliente de um protocolo HTTP no Qt. Ela prov vrias funes que desempenham as operaes HTTP mais comuns, incluindo get() e post(), e prov um meio de enviar requisies HTTP arbitrrias. Existem vrias similaridades entre QFtp e QHttp.

Criando uma Conexo HTTP


A classe QHttp assncrona. trabalha de forma

Quando chamamos uma funo como get() ou post(), a funo d um retorno imediato. A transferncia da dados ocorre depois, quando o controle retorna para um loop do Qt. Isto garante que a interface de usurio da aplicao no fique aguardando enquanto requisies HTTP esto sendo processadas.

Criando uma Conexo HTTP


A classe QHttp prov algumas operaes, incluindo setHost(), get(), post(), e head(). Se um site requer autenticao, setUser() pode ser usado para solicitar um nome de usurio e uma senha.

Criando uma Conexo HTTP


QHttp pode usar um socket fornecido pelo programador ao invs da funo interna QTcpSocket. Isto torna possvel usar um QsslSocket seguro para alcanar o HTTP atravs de uma conexo SSL ou TSL.

Criando uma Conexo HTTP

Criando uma Conexo HTTP

Criando uma Conexo HTTP

Criando uma Conexo HTTP

Criando uma Conexo HTTP

Implementando Aplicaes Cliente-Servidor TCP


Um pouco sobre TCP:
um protocolo da camada de transporte; Orientado a conexo; Oferece segurana; Oferece comutao de circuitos; Serve de base para protocolos de nvel de aplicao(FTP, HTTP); Protocolos de alto nvel construdos com base no TCP so tipicamente orientados a linha ou orientados a bloco;

Implementando Aplicaes Cliente-Servidor TCP


As classes QTcpSocket e QTcpServer so usadas para implementar clientes e servidores TCP; QTcpSocket indiretamente derivada QIODevice(atravs de QAbstractSocket); de

Pode ler de um arquivo ou escrever em um arquivo atravs de QDataStream ou QTextStream;

Implementando Aplicaes Cliente-Servidor TCP


Iremos abordar a implementao de um cliente e um servidor que usam um protocolo personalizada orientado a bloco;
O cliente chamado de Trip Planner e permite aos usurios planejar suas prximas viagens de trem; O servidor chamado de Trip Server e prov infomaes sobre sobre viagens aos clientes;

Implementando Aplicaes Cliente-Servidor TCP

A lista de viagens de trem um QTableWidget; A parte mais baixa da tela ocupada por um Qlabel que mostra o status da ltima operao e um QProgressBar.

Implementando Aplicaes Cliente-Servidor TCP

Implementando Aplicaes Cliente-Servidor TCP

Implementando Aplicaes Cliente-Servidor TCP

Implementando Aplicaes Cliente-Servidor TCP

Implementando Aplicaes Cliente-Servidor TCP

Implementando Aplicaes Cliente-Servidor TCP

Implementando Aplicaes Cliente-Servidor TCP

Implementando Aplicaes Cliente-Servidor TCP


O servidor nos envia uma lista de viagens de trem que atendem ao critrio do usurio;
Cada viagem um bloco nico; Cada bloco comea com um tamanho;

loop forever necessrio porque no necessariamente obtemos um bloco por vez do servidor;
Podemos receber um bloco inteiro, ou parte de um, um bloco e meio, ou todos blocos de uma vez;

Implementando Aplicaes Cliente-Servidor TCP


Formato de um bloco:

Implementando Aplicaes Cliente-Servidor TCP

Implementando Aplicaes Cliente-Servidor TCP

Implementando Aplicaes Cliente-Servidor TCP


Iremos implementar o servidor agora:
Consiste de ClientSocket; duas classes: TripServer e

Implementando Aplicaes Cliente-Servidor TCP

Implementando Aplicaes Cliente-Servidor TCP

Implementando Aplicaes Cliente-Servidor TCP

Implementando Aplicaes Cliente-Servidor TCP

Implementando Aplicaes Cliente-Servidor TCP

Implementando Aplicaes Cliente-Servidor TCP

Enviando e recebendo Datagramas UDP


Um pouco sobre UPD:
Protocolo da camada de transporte; No orientado conexo; No oferece segurana(melhor esforo); Oferece comutao de pacotes;

Iremos ver como se usa UDP no Qt atravs das aplicaes Weather Baloon e Weather Station;

Enviando e recebendo Datagramas UDP

Enviando e recebendo Datagramas UDP

Enviando e recebendo Datagramas UDP

Enviando e recebendo Datagramas UDP

Enviando e recebendo Datagramas UDP

Enviando e recebendo Datagramas UDP

Enviando e recebendo Datagramas UDP

Enviando e recebendo Datagramas UDP

Referncias

http://doc.qt.nokia.com/main-snapshot/qftp.html http://doc.qt.nokia.com/qq/qq06-farreaching.html http://thisthread.blogspot.com/2011/04/ftp-with-qt.html

Você também pode gostar