Python - Programação de Rede
Python fornece dois níveis de acesso a serviços de rede. Em um nível baixo, você pode acessar o suporte básico de soquete no sistema operacional subjacente, que permite implementar clientes e servidores para protocolos orientados a conexão e sem conexão.
O Python também possui 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 dá a você a compreensão do conceito mais famoso em Networking - Socket Programming.
O que são soquetes?
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 diferentes continentes.
Os soquetes podem ser implementados em vários tipos de canais diferentes:soquetes de domínio Unix, TCP, UDP e assim por diante. O soquete A biblioteca 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 -
Nº Sr. | Termo e Descrição |
---|---|
1 | Domínio 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 | tipo O tipo de comunicação entre os dois terminais, normalmente SOCK_STREAM para protocolos orientados a conexão e SOCK_DGRAM para protocolos sem conexão. |
3 | protocolo Normalmente zero, isso pode ser usado para identificar uma variante de um protocolo dentro de um domínio e tipo. |
4 | nome do host O identificador de uma interface de rede -
|
5 | porta Cada servidor escuta 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 soquete Módulo
Para criar um socket, você deve usar o socket.socket() função disponível no soquete módulo, 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.
-
protocolo − Isso geralmente é deixado de fora, padronizando para 0.
Depois de ter soquete objeto, então 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
Nº Sr. | Método e descrição |
---|---|
1 | s.bind() Este método vincula o endereço (nome do host, par de números da porta) ao soquete. |
2 | s.ouvir() Este método configura e inicia o ouvinte TCP. |
3 | s.aceitar() Isso aceita passivamente a conexão do cliente TCP, esperando até que a conexão chegue (bloqueio). |
Métodos de socket de cliente
Nº Sr. | Método e descrição |
---|---|
1 | s.conectar() Este método inicia ativamente a conexão do servidor TCP. |
Métodos gerais de soquete
Nº Sr. | Método e descrição |
---|---|
1 | s.recv() Este método recebe mensagem TCP |
2 | s.send() Este método transmite a mensagem TCP |
3 | s.recvfrom() Este método recebe mensagem UDP |
4 | s.sendto() Este método transmite mensagem UDP |
5 | s.fechar() Este método fecha o soquete |
6 | socket.gethostname() Retorna o nome do host. |
Um servidor simples
Para escrever servidores de Internet, usamos o socket função disponível no módulo socket para criar um objeto socket. Um objeto de soquete é então usado para chamar outras funções para configurar um servidor de soquete.
Agora chame bind(hostname, port) função para especificar uma porta para seu serviço no host fornecido.
Em seguida, chame o aceitar método do objeto retornado. Este método espera até que um cliente se conecte à porta que você especificou e então retorna uma conexão objeto que representa a conexão com esse cliente.
#!/usr/bin/python # This is server.py file import socket # Import socket module s = socket.socket() # Create a socket object host = socket.gethostname() # Get local machine name port = 12345 # Reserve a port for your service. s.bind((host, port)) # Bind to the port s.listen(5) # Now wait for client connection. while True: c, addr = s.accept() # Establish connection with client. print 'Got connection from', addr c.send('Thank you for connecting') c.close() # Close the connection
Um cliente simples
Vamos escrever um programa cliente muito simples que abre uma conexão com uma determinada porta 12345 e um determinado host. Isso é muito simples para criar um cliente de soquete usando o socket do Python função do módulo.
O socket.connect(hosname, port ) abre uma conexão TCP com hostname na porta . Depois de ter um soquete aberto, você pode lê-lo como qualquer objeto de E/S. Quando terminar, lembre-se de fechá-lo, como fecharia um arquivo.
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/python # This is client.py file import socket # Import socket module s = socket.socket() # Create a socket object host = socket.gethostname() # Get local machine name port = 12345 # Reserve a port for your service. s.connect((host, port)) print s.recv(1024) s.close() # Close the socket when done
Agora execute este server.py em segundo plano e, em seguida, execute acima do client.py 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
Isso produziria o seguinte resultado -
Got connection from ('127.0.0.1', 48437) Thank you for connecting
Módulos de Internet Python
Uma lista de alguns módulos importantes na programação Python Network/Internet.
Protocolo | Função comum | Nº da porta | Módulo Python |
---|---|---|---|
HTTP | Páginas da Web | 80 | httplib, urllib, xmlrpclib |
NNTP | Notícias da Usenet | 119 | nntplib |
FTP | Transferências de arquivos | 20 | ftplib, urllib |
SMTP | Enviando e-mail | 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.
Outras leituras
Este foi um início rápido com a programação de soquete. É um assunto vasto. Recomenda-se acessar o link a seguir para encontrar mais detalhes -
-
Programação de soquetes Unix.
-
Biblioteca e módulos de soquetes Python.
python