You are on page 1of 19

1 Python & sockets

Edilayne Salgueiro 23/02/2016


>>> print Hello Python
2

Inicie python no
modo interativo
digitando na
linha de
comando:
$ python
Use comando
print

Modo interativo:
http://wiki.python.org.br/ModoInterativo
Edilayne Salgueiro 23/02/2016
Incio simples
3

Uso de variveis:
>>> x = 42
>>> print Valor de x: " + str(x)
O que faz o cdigo abaixo?

>>> for line in file("test.txt"):


... words = line.split(" ")
... print " ".join(reversed(words))

Edilayne Salgueiro 23/02/2016


Para incio de conversa
4

Tipos de dados:
https://pt.wikibooks.org/wiki/Python/Conceitos_bsicos/Tipos_e_operadores

Estrutura de dados:
https://pt.wikibooks.org/wiki/Python/Conceitos_bsicos/Estrutura_de_dados

Funes:
https://pt.wikibooks.org/wiki/Python/Conceitos_bsicos/Funes

Estruturas de controle

http://turing.com.br/pydoc/2.7/tutorial/controlflow.html

Mdulos
http://turing.com.br/pydoc/2.7/tutorial/modules.html
Edilayne Salgueiro 23/02/2016
Programao de sockets

Objetivo: aprender a criar aplicao cliente-servidor que se comunica


usando sockets

API socket socket


introduzida no BSD4.1 UNIX
em 1981 Uma interface criada
criada, usada e liberada
pela aplicao e
explicitamente pelas apls. controlada pelo SO (uma
porta) na qual o
paradigma cliente-servidor
processo da aplicao
dois tipos de servios de
pode enviar e receber
transporte por meio da API
socket: mensagens para/de outro
processo da aplicao
UDP
TCP
Fundamentos
de programao de socket

servidor deve estar socket identificado


rodando antes que o localmente com um
cliente possa lhe nmero de porta
enviar algo semelhanteao nmero
servidor deve ter um de apartamento de um
socket (porta) pelo prdio
qual recebe e envia
cliente precisa saber
segmentos o endereo IP do
da mesma forma, o servidor e o nmero de
cliente precisa de um porta do socket
socket
Aplicaes de Rede
Um programa de computador executando em um hospedeiro denominado
7 processo. Quando dois processos em um mesmo hospedeiro se comunicam,
usam o mecanismo de comunicao entre processos (IPC) definido pelo
Sistema Operacional (SO). Processos em hospedeiros diferentes se
comunicam trocando mensagens.
Aplicaes da internet utilizam protocolos tais como http, smtp,
ftp, etc para implementar servios de rede. O Sistema Operacional deve
oferecer uma interface para aplicaes no computador, para que essas
aplicaes possam acessar o software de protocolos e assim obter
acesso rede. Para ter acesso a rede faz-se uso de APIs
(Application Programming Interface). A API mais conhecida a Socket
que originalmente foi desenvolvida em Berkely para o Unix
A interface de rede para aplicaes executando em um computador local
realizada por meio de canais lgicos chamados portas. Mensagens
chegando a uma mquina no so apenas endereados a uma mquina, e
sim a programas ou servios em determinadas portas. Essa associao
de endereo IP e nmero de porta referenciada como endereo de
socket. A API de Sockets garantem a intercomunicao bidirecional
entre processos, executados localmente ou em mquinas conectadas
atravs de uma rede. Edilayne Salgueiro 23/02/2016
Modelo Cliente-Servidor
8

No Modelo Cliente-Servidor, os clientes so


processos que iniciam sesses de comunicao
com os processos servidores que aguardam
requisies de entrada.

Request Processo
Processo Cliente
Servidor
Reply

Mquina Cliente
Mquina Servidora
Socket Bsico
9

1. Incio
Para utilizar as primitivas de comunicao (funes)
em Python necessrio importar o mdulo socket:
import socket
Alguns exemplos de funes presentes no mdulo
socket so:
socket.gethostname()
Para obter o IP de sua mquina, pode-se utilizar:

socket.gethostbyname(socket.gethostname())
Exemplos:

http://wiki.python.org.br/SocketBasico
Edilayne Salgueiro 23/02/2016
Para obter IP
10

$ nano host.py
import socket

hostname= socket.gethostname()
print O nome dessa maquina e: +hostname

# A maquina gprcom no esta na Internet


# IP= socket.gethostbyname(hostname)
# print O IP dessa maquina e: +host

hostname = maps.google.com
IP = socket.gethostbyname(hostname)
print ("O endereo de ", hostname, " e ", IP)
$ python host.py
O endereo de maps.google.com e 173.194.118.98
Endereos de Sockets:
http://wiki.python.org.br/SocketBasico
11

Sockets criados usam endereos para fazer referncias


entre si. No caso de sockets alguns possveis endereos
so:
AF_UNIX - endereo composto por um caminho dentro do sistema
de arquivos. O domnio est restrito a rvore de diretrios
acessvel pelo processo que criou o socket. Utilizado quando os
processos rodam em uma mesma mquina;
AF_INET - O endereo composto pelo endereo de rede da
mquina (IP) e o nmero de identificao da porta sendo
utilizada pelo processo.
De acordo com o tipo de servio da camada de transporte (UDP
ou TCP, por exemplo) que vai ser usado na comunicao,
pode-se adotar os seguintes tipos de socket:
SOCK_DGRAM - indica que os dados iro trafegar pelo socket na
forma de datagramas.
SOCK_STREAM - indica que os dados iro trafegar pelo socket na
forma de uma cadeia (stream) de caracteres.

Edilayne Salgueiro 23/02/2016


Exemplo Cliente-Servidor
12

Exemplo de aplicao em que cliente envia


mensagens para servidor

Processo
Processo Cliente
Servidor

Mquina Cliente
Mquina Servidora
Programao de socket com
UDP: sem conexo
entre cliente e
servidor ponto de vista da aplicao
sem handshaking
emissor conecta de forma UDP oferece transferncia no
explcita endereo IP e confivel de grupos de bytes
porta do destino a cada (datagramas) entre
segmento
cliente e servidor
SO conecta endereo IP e
porta do socket emissor a
cada segmento
Servidor pode extrair Nota: A terminologia oficial para u
endereo IP, porta do pacote UDP datagrama. Nesta
emissor a partir do aula, usamos segmento UDP em
segmento recebido seu lugar.
Exemplo em curso
http://wiki.python.org.br/SocketBasico

Cliente executa continuamente:


usurio digita linha de texto
programa cliente envia linha ao servidor
Servidor:
servidor recebe linha de texto
Mostra mensagem recebida
Interao de socket cliente/servidor: UDP

# servidor # cliente
import socket import socket
cria socket,
criar socket,
clientSocket
ServerSocket= socket.socket(socket.AF_INET,
socket.SOCK_DGRAM) l mensagem coloca em
bind clientSocket

l datagrama de Cria datagrama com IP do


serverSocket servidor e port = x; envia datagrama
por clientSocket

escreve mensagem na
tela l mensagem coloca em
clientSocket
fecha
clientSocket
Programao de socket usando

Servio TCP: transferncia confivel de bytes de


um processo para outro

controlado pelo
controlado pelo processo desenvolvedor
desenvolvedor processo
da aplicao
da aplicao
socket socket
controlado TCP com TCP com controlado
buffers, pelo sistema
pelo sistema buffers, Internet variveis operacional
operacional variveis

hospedeiro hospedeiro
ou servidor ou servidor
Programao
de socket com TCP
cliente deve contactar servidor quando contactado pelo
processo servidor primeiro cliente, servidor TCP cria
deve estar rodando novo socket para processo
servidor se comunicar com
servidor deve ter criado
cliente
socket (porta) que aceita
contato do cliente permite que servidor fale
com mltiplos clientes
cliente contacta servidor: nmeros de porta de origem
criando socket TCP local ao usados para distinguir
cliente clientes (mais no Cap. 3)
especificando endereo IP, #
porta do processo servidor ponto de vista da aplicao
quando cliente cria socket: TCP oferece transferncia
cliente TCP estabelece de bytes confivel, em ordem
conexo com servidor TCP (pipe) entre cliente e servidor
Interao de socket Como usar
esse modelo
cliente/servidor: TCP para
servidor (rodando em hostid) implementar
cria socket, HTTP?
porta = x, para
requisio que chega:
welcomeSocket
Cliente

espera requisio
estabelecimento cria socket,
da conexo que chega da conexo TCP conexo com hostid, porta = x
clientSocket
connectionSocket

envia requisio usando


l requisio de clientSocket
connectionSocket

escrever resposta em
connectionSocket l resposta de
clientSocket
fecha
connectionSocket fecha
clientSocket
19 Redes 2
Python & sockets

Edilayne Salgueiro 23/02/2016

You might also like