Python 3 - programação de rede
Python fornece dois níveis de acesso aos serviços de rede. Em um nível inferior, você pode acessar o suporte de soquete básico no sistema operacional subjacente, que permite implementar clientes e servidores para protocolos orientados a conexão e sem conexão.
Python também tem bibliotecas que fornecem acesso de nível superior a protocolos de rede específicos de nível de aplicativo, como FTP, HTTP e assim por diante.
Este capítulo fornece uma compreensão do conceito mais famoso em Rede - Programação de Soquete.
O que é Sockets?
Os soquetes são os terminais de um canal de comunicação bidirecional. Os soquetes podem se comunicar dentro de um processo, entre processos na mesma máquina ou entre processos em continentes diferentes.
Os soquetes podem ser implementados em vários tipos de canais diferentes: soquetes de domínio Unix, TCP, UDP e assim por diante. A biblioteca de soquetes fornece classes específicas para lidar com os transportes comuns, bem como uma interface genérica para lidar com o resto.
Os soquetes têm seu próprio vocabulário -
Sr. Não. | Termo e descrição |
---|---|
1 | domain A família de protocolos usada como mecanismo de transporte. Esses valores são constantes como AF_INET, PF_INET, PF_UNIX, PF_X25 e assim por diante. |
2 | type O tipo de comunicação entre os dois pontos de extremidade, normalmente SOCK_STREAM para protocolos orientados à conexão e SOCK_DGRAM para protocolos sem conexão. |
3 | protocol Normalmente zero, isso pode ser usado para identificar uma variante de um protocolo dentro de um domínio e tipo. |
4 | hostname O identificador de uma interface de rede -
|
5 | port Cada servidor escuta os 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 Soquete
Para criar um socket, você deve usar a função socket.socket () disponível no módulo socket, que tem a sintaxe geral -
s = socket.socket (socket_family, socket_type, protocol = 0)
Aqui está a descrição dos parâmetros -
socket_family - Este é AF_UNIX ou AF_INET, conforme explicado anteriormente.
socket_type - Este é SOCK_STREAM ou SOCK_DGRAM.
protocol - Isso geralmente é deixado de fora, com o padrão de 0.
Depois de ter o objeto de soquete , você pode usar as funções necessárias para criar seu programa cliente ou servidor. A seguir está a lista de funções necessárias -
Métodos de soquete de servidor
Sr. Não. | Método e Descrição |
---|---|
1 | s.bind() Este método liga o endereço (nome do host, par de número da porta) ao soquete. |
2 | s.listen() Este método configura e inicia o listener TCP. |
3 | s.accept() Isso aceita passivamente a conexão do cliente TCP, aguardando até que a conexão chegue (bloqueio). |
Métodos de soquete de cliente
Sr. Não. | Método e Descrição |
---|---|
1 | s.connect() Este método inicia ativamente a conexão do servidor TCP. |
Métodos Gerais de Soquete
Sr. Não. | Método e Descrição |
---|---|
1 | s.recv() Este método recebe mensagem TCP |
2 | s.send() Este método transmite mensagem TCP |
3 | s.recvfrom() Este método recebe mensagem UDP |
4 | s.sendto() Este método transmite mensagem UDP |
5 | s.close() Este método fecha o soquete |
6 | socket.gethostname() Retorna o nome do host. |
Um servidor simples
Para escrever servidores de Internet, usamos o socketfunção disponível no módulo de soquete para criar um objeto de soquete. Um objeto de soquete é então usado para chamar outras funções para configurar um servidor de soquete.
Agora chame o bind(hostname, port)função para especificar uma porta para o seu serviço no host fornecido.
Em seguida, chame o método de aceitação do objeto retornado. Este método espera até que um cliente se conecte à porta que você especificou e, em seguida, retorna um objeto de conexão que representa a conexão com esse cliente.
#!/usr/bin/python3 # This is server.py file
import socket
# create a socket object
serversocket = socket.socket(
socket.AF_INET, socket.SOCK_STREAM)
# get local machine name
host = socket.gethostname()
port = 9999
# bind to the port
serversocket.bind((host, port))
# queue up to 5 requests
serversocket.listen(5)
while True:
# establish a connection
clientsocket,addr = serversocket.accept()
print("Got a connection from %s" % str(addr))
msg = 'Thank you for connecting'+ "\r\n"
clientsocket.send(msg.encode('ascii'))
clientsocket.close()
Um cliente simples
Vamos escrever um programa cliente muito simples que abre uma conexão para uma determinada porta 12345 e um determinado host. É muito simples criar um cliente de soquete usando a função de módulo de soquete do Python .
o socket.connect(hosname, port )abre uma conexão TCP para o nome do host na porta . Depois de ter um soquete aberto, você pode ler dele como qualquer objeto IO. Quando terminar, lembre-se de fechá-lo, como você fecharia um arquivo.
Exemplo
O código a seguir é um cliente muito simples que se conecta a um determinado host e porta, lê todos os dados disponíveis do soquete e sai -
#!/usr/bin/python3 # This is client.py file
import socket
# create a socket object
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# get local machine name
host = socket.gethostname()
port = 9999
# connection to hostname on the port.
s.connect((host, port))
# Receive no more than 1024 bytes
msg = s.recv(1024)
s.close()
print (msg.decode('ascii'))
Agora execute este server.py em segundo plano e execute o client.py acima para ver o resultado.
# Following would start a server in background.
$ python server.py &
# Once server is started run client as follows:
$ python client.py
Resultado
Isso produziria o seguinte resultado -
on server terminal
Got a connection from ('192.168.1.10', 3747)
On client terminal
Thank you for connecting
Módulos de Internet Python
Uma lista de alguns módulos importantes na rede Python / programação da Internet é fornecida abaixo -
Protocolo | Função comum | Port No | Módulo Python |
---|---|---|---|
HTTP | paginas web | 80 | httpplib, urllib, xmlrpclib |
NNTP | Notícias da Usenet | 119 | nntplib |
FTP | Transferência de arquivos | 20 | ftplib, urllib |
SMTP | Enviando email | 25 | smtplib |
POP3 | Buscando e-mail | 110 | poplib |
IMAP4 | Buscando e-mail | 143 | imaplib |
Telnet | Linhas de comando | 23 | telnetlib |
Gopher | Transferências de documentos | 70 | gopherlib, urllib |
Verifique todas as bibliotecas mencionadas acima para trabalhar com os protocolos FTP, SMTP, POP e IMAP.
Leituras adicionais
Este foi um início rápido com a Programação de Soquete. É um assunto vasto. Recomenda-se acessar o seguinte link para obter mais detalhes -