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