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.

  1. 25 perguntas e respostas mais surpreendentes da entrevista em Python
  2. Carreiras em Python
  3. Quais são os benefícios e limitações do uso de Python?
  4. Diferença importante Python vs Ruby Performance
  5. Introdução à programação de soquetes em PHP
  6. Programação de soquetes em Java | Método da classe Socket