segunda-feira, 22 de agosto de 2011

Programação Python Networking














O Python fornece dois níveis de acesso aos serviços de rede. Em um nível baixo, você pode acessar o suporte de socket básicos no sistema operacional subjacente, que permite implementar clientes e servidores para ambos os protocolos orientado a conexão e sem conexão.
Python também tem bibliotecas que fornecem o acesso de nível superior  a protocolos específicos em nível de aplicativo de rede, como FTP, HTTP, e assim por diante.
Este post tem como objetivo falar sobre programação de socket.

O que são sockets?
Sockets são interfaces para a comunicação via rede, quando se cria um socket,se está criando um canal de comunicação bidirecional entre o cliente/servidor.

Eles podem se comunicar dentro de um processo, entre processos na mesma máquina, ou entre processos em diferentes continentes.
Pode ser implementado ao longo de vários tipos de canais diferentes: sockets de domínio Unix, TCP, UDP, e assim por diante. A biblioteca de sockets fornece classes específicas para lidar com o transporte comum, bem como uma interface genérica para lidar com o resto.

  • Domain : A família de protocolos que serão utilizados como mecanismo de transporte. Estes valores são constantes, tais como AF_INET, PF_INET, PF_UNIX, PF_X25, e assim por diante.
  • Type : O tipo de comunicação entre os dois terminais, normalmente SOCK_STREAM para orientação a conexão protocolos e SOCK_DGRAM para protocolos de conexão.
  • Protocol :  Geralmente nulo, este campo pode ser usado para identificar uma variante de um protocolo dentro de um domínio e tipo.
  • Hostname :  O identificador de uma interface de rede.
  • Port : Cada servidor lista clientes "chamando" em uma ou mais portas. Uma porta pode ser um número de porta Fixnum, uma string contendo um número de porta, ou o nome de um serviço. 

O módulo de socket 

Para criar um socket, você deve usar a função socket.socket () disponível no módulo de socket, que tem a seguinte sintaxe:

s = socket.socket (socket_family, socket_type, protocol=0)

Parâmetros:
- socket_family : Este é ou AF_UNIX ou AF_INET.
- socket_type : Este é ou SOCK_STREAM ou SOCK_DGRAM.
- protocol : = 0 descartado.

Depois de ter objeto socket, então você pode usar as funções necessárias para criar o seu cliente ou o programa servidor. A tabela a seguir contem a lista de funções necessárias:

























 


Um servidor simples: 


Para escrever servidores de Internet, nós usamos a função de socket disponíveis no módulo para criar um objeto. Um objeto é então usado para chamar outras funções para configurar um servidor socket.
Agora chamar bind (função, hostname porta para especificar uma porta para o seu serviço na máquina host).
Em seguida, chamar o método de aceitar o objeto retornado. Este método aguarda até que um cliente se conecta à porta que você especificou, e retorna um objeto de conexão que representa a conexão com esse cliente.




#!/usr/bin/python           

import socket               # Importa o modulo de socket

s = socket.socket()         # Cria um objeto de socket
host = socket.gethostname() # Retorna o nome da máquina local
port = 12345                # Reserva uma porta para o seu serviço
s.bind((host, port))        # Bind para a porta

s.listen(5)                 # Esperar a conexão do cliente
while True:
   c, addr = s.accept()     # Estabelecer conexão com o cliente
   print 'Recebeu a conexão de', addr
   c.send('Conexão deu certo')
   c.close()                # Encerra a conexão

Um cliente simples: 

Agora vamos escrever um programa cliente muito simples que vai abrir uma conexão com uma determinada porta 12345 e determinado host.
O Socket.connect (hosname, porta) abre uma conexão TCP para o nome na porta.
Depois de ter um socket aberto, você pode lê-lo como qualquer outro objeto IO. Quando terminar, lembre-se de fechá-lo.
O código a seguir é um cliente muito simples que se conecta a um determinado host e porta, lê todos os dados disponíveis a partir do socket, e depois sai:

#!/usr/bin/python           

import socket             

s = socket.socket()         # Cria um objeto de socket
host = socket.gethostname() # Retorna o nome da máquina local
port = 12345                # Reserva uma porta para o seu serviço

s.connect((host, port))
print s.recv(1024)
s.close                     # encerra

Agora execute este server.py ( em background) e em seguida, execute client.py para ver o resultado.

# Após iria iniciar um servidor em background:
 $ Python server.py & 

 # Uma vez servidor é iniciado cliente executado:

 $ Python client.py
 
 Resultado: 

Recebeu a conexão de ('127.0.0.1', 48437) 
Conexão deu certo

0 comentários:

Postar um comentário