Criando um Messenger com Sockets em Python: Tutorial Passo a Passo

Criando um Messenger com Sockets em Python: Tutorial Passo a Passo

Sockets são usados para enviar dados através da rede, um exemplo seria enviar um arquivo pelo Rocket.chat /  Skype / Whats App, ou ainda podemos considerar até mesmo as próprias mensagens.

Nesse tutorial, vou criar uma aplicação estilo messenger com cliente – servidor e enviar as mensagens na rede fazendo o uso de Sockets. Um grande erro que alguns programadores cometem, é acreditar que os Sockets são da linguagem de programação, quando na realidade, são do próprio Sistema Operacional, precisamos somente saber como usá-los.

Para saber um pouco mais sobre o Socket em qualquer distribuição Linux, basta usar o seguinte comando:

 $ man socket

Como resultado, você terá a documentação que traz uma visão geral sobre o seu uso e suas funções, depois é só adaptar conforme a linguagem de programação que estiver usando.

APLICAÇÃO DO LADO SERVIDOR

Primeiro, vamos criar o servidor que vai receber as mensagens da nossa aplicação Client.

#!/usr/bin/python 
# 
# Coded by: Alisson Machado
# Contact: alisson.copyleft@gmail.com
# servidor que recebe mensagens de aplicação client parecido com o netsend
#
import socket 
host = '' 
port = 7000 
addr = (host, port) 
serv_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serv_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
serv_socket.bind(addr) 
serv_socket.listen(10) 
print 'aguardando conexao' 
con, cliente = serv_socket.accept() 
print 'conectado' 
print "aguardando mensagem" 
recebe = con.recv(1024) 
print "mensagem recebida: "+ recebe serv_socket.close() 

Explicando um pouco as linhas acima:

serv_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

– Aqui, criamos o nosso mecanismo de Socket para receber a conexão, onde na função passamos 2 argumentos, AF_INET que declara a família do protocolo; se fosse um envio via Bluetooth por exemplo, seria: AF_BLUETOOTH, SOCKET_STREAM, indica que será TCP/IP.

serv_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

– Essa linha serve para zerar o TIME_WAIT do Socket, por exemplo, se o programa estiver aguardando uma conexão e você der CTRL+C para interromper, o programa  será fechado, porém o Socket continua na escuta e se você for usar a mesma porta receberá a seguinte mensagem:

socket.error: [Errno 98] Address already in use
serv_socket.bind(addr)

– Esta linha define para qual IP e porta o servidor deve aguardar a conexão, que no nosso caso é qualquer IP, por isso o Host é ”.

serv_socket.listen(10)

– Define o limite de conexões.

con, cliente = serv_socket.accept()

– Deixa o Servidor na escuta aguardando as conexões, feita a conexão vem o seguinte comando:

recebe = con.recv(1024)

– Aguarda um dado enviado pela rede de até 1024 Bytes, a função ‘recv’ possui somente 1 argumento que é o tamanho do Buffer.

APLICAÇÃO DO LADO CLIENTE

Agora, vamos criar a aplicação cliente para testar o nosso Servidor:

#!/usr/bin/python
# Coded by: Alisson Machado
# Contact: alisson.machado@responsus.com.br
#

import socket 
ip = raw_input('digite o ip de conexao: ') 
port = 7000 
addr = ((ip,port)) 
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
client_socket.connect(addr) 
mensagem = raw_input("digite uma mensagem para enviar ao servidor") 
client_socket.send(mensagem) 
print 'mensagem enviada' 
client_socket.close()

A maioria das linhas do nosso programa Client já foi descrita no Servidor, pois são apenas alguns ajustes para se fazer o uso do Socket, neste segundo programa, a única diferença são as linhas:

client_socket.connect(addr)

– Que faz a conexão no nosso servidor.

client_socket.send(mensagem)

– Que faz o envio do dado para servidor.

client_socket.close()

– Serve para fechar a conexão entre os dois aplicativos.

Bem, acho que um resumão sobre Socket em Python.

É isso aí, em breve um artigo com uso de Threads.

Anterior 4Linux busca talentos: vagas para DBA, Analista Linux e Trainee Python
Próxima Guia prático: Como instalar e usar o Kubernetes com Minikube

About author

Alisson Machado
Alisson Machado 22 posts

Alisson Menezes, atua como Gerente de T.I, 9 anos de experiência em projetos FOSS (Free and Open Source Software) e Python. Formação em Análise de Sistemas pela FMU e cursando MBA em BigData pela FIA, possui certificações LPI1, LPI2 e SUSE CLA, LPI DevOps e Exim - DevOps Professional. Autor dos cursos Python Fundamentals, Python for Sysadmins, MongoDB for Developers/DBAs, DevSecOps, Co-Autor do Infraestrutura Ágil e Docker da 4Linux e palestrantes em eventos como FISL, TDC e Python Brasil. É entusiasta das mais diversas áreas em T.I como Segurança, Bancos de dados NoSQL, DataScience mas tem como foco DevOps e Automação.

View all posts by this author →

Você pode gostar também

Desenvolvimento

Moodle – Descomplicando a instalação

Caro leitor, nesse artigo vamos tentar descomplicar a instalação do ambiente virtual de aprendizado Moodle para quem está iniciando o uso desta plataforma. Para isso, utilizaremos o Vagrant para provisionar

Desenvolvimento

Descubra a importância do Python na cultura DevOps e na automatização

Automatização de Infraestrutura – DevOps e Python Hoje em dia os profissionais de TI estão olhando cada vez mais para DevOps e Python. Se você quer saber por que a

Desenvolvimento

Novos cursos de PHP 7.2: aprenda desenvolvimento web e orientação a objetos

Agora na versão 7.2 do PHP o curso abrange tipos escalares, declaração de tipo de retorno para os métodos, null coalescing entre outras novidades presentes na nova versão. A 4Linux