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.
About author
Você pode gostar também
Descubra o poder da programação concorrente com a linguagem Go
O mundo da tecnologia se encontra em uma constante corrida: a corrida das tecnologias,das ferramentas, das linguagens de programação. Novos problemas vão surgindo e, com eles, novas demandas, novas formas
Guia completo para instalação do Gitea: Ferramenta open source de gerenciamento de código-fonte
O Gitea é uma ferramenta open source de Source Code Management – SCM, ou seja, gerenciamento de código-fonte, escrita em Go e que foi criada em novembro de 2016 além
Descubra por que o PHP é a linguagem ideal para desenvolvimento web
O PHP é uma linguagem orientada a objetos, server-side, interpretada, com tipagem dinâmica voltada para WEB. Outras linguagens para WEB que você pode ter ouvido falar são ASP, Python e