Programação em soquete Python - Antes de começar com a programação em soquete Python, espero que você tenha bons conhecimentos básicos em python. Se você conhece o Django também, seria ainda mais fácil de entender. Não, a programação de soquetes não está relacionada ao Django, mas as terminologias na programação de soquetes Python e Django são quase as mesmas, embora sejam duas categorias diferentes. Então, para começar, o que exatamente é Python Socket Programming? A programação do Python Socket não existe apenas no python, mas também no Java e em quase todas as outras linguagens de programação. Mas no caso de python, a programação de soquetes é realmente muito fácil de entender. Programação em Python Socket significa programação em rede. Inclui códigos relacionados ao lado do cliente e ao servidor Python Socket. Mas essa definição é tão boa quanto um livro informando que a programação C é usada para desenvolver software. E não, não estou aqui para isso. Estou aqui para garantir que você tenha uma compreensão mais profunda dos conceitos básicos da programação de soquetes Python, antes de começar a escrever seus próprios módulos de soquetes. Então, vamos começar e ver como o soquete funciona no lado do cliente ou no lado do servidor Python Socket.
O que é programação em soquete Python?
Se você aprendeu a programação C, aprender a programação de soquetes python no Python seria muito fácil, pois eles são quase os mesmos. Para simplificar, a programação de soquetes python é apenas um código de como os computadores em uma rede se comunicam. E isso não termina apenas com uma rede baseada em LAN, também suporta redes baseadas em WAN, MAN e intranet. Até usamos soquetes no dia a dia. Não entendendo? Deixe-me dar um exemplo simples. Quando você deseja se conectar, digamos Facebook.com, basta digitar a mesma coisa na barra de URL. Portanto, essa conexão que você acabou de criar não é apenas criada pelo material do DNS. Tudo isso é configurado através da programação de soquetes python. Soquetes decidem como duas redes se comunicam. Qualquer comunicação passando por uma rede, seja um vídeo, conexões VOIP ou apenas texto; tudo passa por um soquete. Agora que sabemos o que são soquetes, vamos desenvolver nosso próprio soquete em python.
Fonte da imagem: pixabay.com
Tipos de programação de soquete Python
Agora existem muitas tomadas por aí. Mas não falaremos sobre todos eles, já que não posso cobrir todos e cada um deles aqui. Você pode criar um soquete UDP, soquete TCP ou até mesmo um soquete de porta e há muito mais se eu continuar. Hoje, porém, eu gostaria de estudar mais os soquetes TCP e UDP, já que eles são os mais básicos e podem ser extremamente bons como ponto de partida para começar a programação do Python Socket.
-
Programação de soquetes UDP
O Protocolo de datagrama do usuário ou seu UDP é conhecido como um protocolo alternativo ao TCP que transfere pacotes de um host para outro. Mas, diferentemente do TCP (protocolo de controle de transmissão), o UDP é um protocolo sem conexão e não é orientado por fluxo. Isso significa que o servidor UDP capturará apenas pacotes recebidos de todo o host sem identificar uma conexão de origem confiável. Usaremos a função socket.socket para fazer isso. Um soquete UDP simples é criado da seguinte maneira em Python:
import socket #importing socket module da biblioteca python # Agora precisamos criar AF_INET e sock dgram socketss = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) print "Socket Creation Successful" |
Sim. É isso aí e criamos um soquete UDP simples aqui em python. Programação de soquetes Python ou mesmo a criação de um soquete simples não é ciência do foguete. Mas, no entanto, o grande problema está na codificação do servidor UDP e do cliente. Como os soquetes UDP não têm conexão, as comunicações são iniciadas com as funções de envio e recebimento de soquetes. Essas funções não exigem que eles sejam conectados um ao outro. Eles podem realmente enviar e receber pacotes de qualquer fonte aleatória. Aqui está como um servidor UDP é criado:
import socketport = 2924s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) s.bind ((“”, port)) print “Solicitando conectividade com a porta na máquina”, porta
enquanto 1: dados, endereço = s.recvfrom (1024) imprimir dados |
Isso pode não parecer muito, mas é assim que ele é realmente criado. Pode-se usar qualquer porta aqui. Acabei de escolher uma aleatória como 2924. O servidor UDP precisa de uma porta aberta para enviar e receber conexões de entrada. Não há como ouvir a porta ou aceitar conexões ou solicitações. Isso acontece sem nenhuma autenticação. Tente executar o servidor acima em um terminal e veja como ele funciona.
Este é apenas um servidor UDP simples que criamos. Vamos torná-lo um pouco mais interessante e também um pouco mais complicado:
”'Este é um servidor de soquete UDP simples' 'import socketimport sys
HOST = "" # Pode-se tentar todas as interfaces disponíveis aqui PORT = 2924 # Qualquer porta aleatória que não seja usada por padrão nas distribuições do Windows ou Linux # Codificando o soquete UDP experimentar : s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) print “Socket initialized” ' exceto socket.error, msg: print “Falha na criação do soquete. Ocorreu o seguinte erro: ”+ str (msg (0)) + 'Mensagem' + msg (1) sys.exit () # Agora precisamos vincular esse soquete ao host e porta acima experimentar: s.bind ((HOST, PORT)) exceto socket.error, msg: print “Falha no soquete de encadernação. O seguinte erro interrompeu a ligação: ”+ str (msg (0)) + 'Mensagem' + msg (1) sys.exit () print 'Ligação do soquete concluída' #Manter a conexão estabelecida enquanto 1: # capturar dados do cliente usando dados e endereço variáveis d = s.recvfrom (1024) dados = d (0) endereço = d (1) se não dados: pausa reply = 'OK …' + dados s.sendto (resposta, endereço) print 'Token message (' + endereço (0) + ':' + str (endereço (1)) + ') -' + data.strip () s.close () |
Execute o programa acima e você iniciará um servidor UDP na porta 2924. Parabéns, você criou com êxito um soquete em Python. E lembre-se de observar que, um servidor UDP pode lidar com vários clientes, diferentemente do servidor TCP, o principal motivo é que não há conectividade fixa em um servidor UDP, como no caso de um servidor TCP.
Cursos recomendados
- Curso de Certificação em Depuração Ruby
- Curso MySQL PHP
- Curso de Certificação em Programação VB.NET
- Treinamento completo da ITIL Foundation
-
Programação de cliente UDP
Agora que criamos com êxito um servidor UDP, precisamos de um cliente para estabelecer uma conexão adequada com ele, para que possamos saber o seu funcionamento. Então, vamos trabalhar na criação de um cliente UDP adequado em Python. Este cliente se conectará ao nosso servidor UDP que criamos acima:
”'Criando um cliente UDP simples usando soquetes”' import socketimport sys
# Criando um soquete UDP experimentar: s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) exceto socket.error: print 'Falha na criação do soquete' sys.exit () host = '127.0.0.1'; # Você também pode tentar usar o host local, insead deste IP, ambos são iguais. porta = 2924; enquanto (1): msg = raw_input ('Digite uma mensagem para enviar ao servidor:') experimentar : #Agora precisamos definir as strings s.sendto (msg, (host, porta)) # Agora precisamos receber dados e endereço do cliente usando dados e endereço d = s.recvfrom (1024) resposta = d (0) endereço = d (1) print 'A resposta do servidor é:' + resposta exceto socket.error, msg: print 'Aparece o seguinte erro:' + str (msg (0)) + 'Message' + msg (1) sys.exit () |
Sim. Criar um cliente UDP na programação do Python Socket é muito mais fácil do que criar um servidor UDP. Mas é assim que acontece. Acho que não precisaria explicar nada do código acima, pois já mencionei todas as coisas necessárias nos comentários da tag #. Apenas verifique se o endereço IP e a porta digitados estão corretos e se o firewall não está bloqueando a conexão; caso contrário, sempre resultará em falha, não importa o quê.
- Programação de soquete TCP
Agora que aprendemos a criar um cliente e servidor UDP, vamos dar uma olhada na programação de soquetes TCP. Usaremos a mesma função socket.socket para criar um soquete TCP aqui.
import socket # Importando o socket do módulo das bibliotecas python # crie um AF_INET e stream socketss = socket.socket (socket.AF_INET, socket.SOCK_STREAM) print 'Socket Creation Successful' |
Aqui, o AF_INET é usado para conexão de endereço Ipv4 e o fluxo de meias é um protocolo orientado a TCP. Este é um soquete TCP simples que criamos. Agora, criaremos uma versão avançada da mesma coisa. Também apresentaremos exceções aqui, da mesma forma que lançamos ao criar servidores e clientes UDP para que, caso a conectividade falhe, saberemos onde está o programa real. Socket.error será usado para manipular todos esses erros semelhantes aos da programação UDP.
Então agora vamos criar um soquete com o tratamento de erros acima e conectar-se ao host facebook.com. É assim que precisa ser feito:
import socket #importing the socket moduleimport systry: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
exceto socket.error, msg: print 'Falha na criação do soquete. Ocorreu o seguinte erro: '+ str (msg (0)) +', Mensagem de erro: '+ msg (1) sys.exit (); print 'Criação de soquete bem-sucedida' host = 'www.facebook.com' port = 2924 experimentar: remote_ip = socket.gethostbyname (host) exceto socket.gaierror: imprima 'Nome de host inadequado. Saindo … sys.exit () print ”+ host + endereço IP 'is' + remote_ip s.connect ((remote_ip, port)) print 'Soquete conectado a' + host + 'no ip' + remote_ip |
Agora isso é suficiente se precisarmos apenas conectar uma conexão. Mas esse não é o nosso objetivo. Pretendemos criar uma conexão em que possamos enviar e receber dados também nas duas extremidades. Podemos enviar dados usando a função sendall. Então aqui está como vai:
import socket #importing the socket moduleimport systry: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
exceto socket.error, msg: print 'Falha na criação do soquete. Ocorreu o seguinte erro: '+ str (msg (0)) +', Mensagem de erro: '+ msg (1) sys.exit (); print 'Criação de soquete bem-sucedida' host = 'www.facebook.com' port = 2924 experimentar: remote_ip = socket.gethostbyname (host) exceto socket.gaierror: imprima 'Nome de host inadequado. Saindo … sys.exit () print ”+ host + endereço IP 'is' + remote_ip s.connect ((remote_ip, port)) print 'Soquete conectado a' + host + 'no ip' + remote_ip #transfering data using the sendall function message = "GET / HTTP / 1.1 \ r \ n \ r \ n" experimentar : s.sendall (mensagem) exceto socket.error: #O envio falhou print 'Falha na transmissão' sys.exit () print 'Status da mensagem: enviado' |
Agora que criamos uma conexão bem-sucedida e também podemos enviar os dados, vamos dar uma olhada em como poderíamos receber os dados completamente. É assim que vai:
import socket #importing the socket moduleimport systry: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
exceto socket.error, msg: print 'Falha na criação do soquete. Ocorreu o seguinte erro: '+ str (msg (0)) +', Mensagem de erro: '+ msg (1) sys.exit (); print 'Criação de soquete bem-sucedida' host = 'www.facebook.com' port = 2924 experimentar: remote_ip = socket.gethostbyname (host) exceto socket.gaierror: imprima 'Nome de host inadequado. Saindo … sys.exit () print ”+ host + endereço IP 'is' + remote_ip s.connect ((remote_ip, port)) print 'Soquete conectado a' + host + 'no ip' + remote_ip #transfering data using the sendall function message = "GET / HTTP / 1.1 \ r \ n \ r \ n" experimentar : s.sendall (mensagem) exceto socket.error: #O envio falhou print 'Falha na transmissão' sys.exit () print 'Status da mensagem: enviado' #Agora, para receber dados, usamos a função recv para alcançá-los reply = s.recv (4096) imprimir resposta |
A última coisa é que precisamos fechar o soquete, o que poderíamos fazer com o seguinte código:
s.close () |
E, finalmente, a parte obrigatória. Podemos usar a função bind para conectar soquetes com endereços IP e portas.
import socketimport sysHOST = ”#Isso é da mesma forma que fizemos no protocolo UDPPORT = 2924 # port para acessar dados.
s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) print 'Criação de soquete bem-sucedida' experimentar: s.bind ((HOST, PORT)) exceto socket.error, msg: print 'Falha na ligação. Ocorreu um erro a seguir '+ str (msg (0)) +' Mensagem '+ msg (1) sys.exit () print 'Socket Binding successful' |
Agora, precisamos ouvir as conexões recebidas se precisarmos que o servidor se conecte. Isso pode ser feito com o seguinte comando simples:
s.listen (10) print 'Ouvinte iniciado' |
E, finalmente, precisamos criar um soquete para aceitar essas conexões:
importar socketimport sysHOST = ”PORT = 2924
s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) print 'Criação de soquete bem-sucedida' experimentar: s.bind ((HOST, PORT)) exceto socket.error, msg: print 'Falha na ligação. Ocorreu um erro a seguir '+ str (msg (0)) +' Mensagem '+ msg (1) sys.exit () print 'Ligação de soquete bem-sucedida' s.listen (10) print 'Ouvinte iniciado' #Aceitar conexões conn, addr = s.accept () #Fornecer informações do cliente conectado print 'Conexão estabelecida com' + addr (0) + ':' + str (addr (1)) |
Na verdade, há muito mais nisso. Também podemos escrever códigos para manipuladores e outras coisas. Mas acho que seria por enquanto. Verifique se os princípios básicos estão corretos, após o que as partes restantes são apenas um pedaço de bolo para aprender.
Primeira fonte da imagem: pixabay.com
Artigos relacionados:-
Aqui estão alguns artigos que ajudarão você a obter mais detalhes sobre a programação do soquete Python, basta acessar o link.
- 25 perguntas e respostas mais surpreendentes da entrevista em Python
- Carreiras em Python
- Quais são os benefícios e limitações do uso de Python?
- Diferença importante Python vs Ruby Performance
- Introdução à programação de soquetes em PHP
- Programação de soquetes em Java | Método da classe Socket