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

Descubra o poder do Node.js e como ele pode transformar seu desenvolvimento web

 Afinal, o que é o Node.js ?     O Node.js ou apenas “Node” é um interpretador de javascript assíncrono, de código aberto e orientado a eventos criando pelo programador Ryan

Desenvolvimento

Curso Python para Integração API e DevOps: Novidades e Benefícios

Prez@dos, É com enorme satisfação que anuncio: o curso Python for Sysadmin está de cara nova. As bases do antigo curso foram mantidas, não se preocupe, mas como tudo na

Desenvolvimento

Desvendando o Zend Framework 3: O guia definitivo para desenvolvedores PHP

Se você está lendo este artigo provavelmente você já desenvolveu ou pretende desenvolver algum projeto de software. Talvez você nunca tenha usado um framework mesmo que não o Zend antes