Um projeto de chat simples e minimalista baseado no protocolo TCP/IP, desenvolvido em Python 3 utilizando a arquitetura Cliente-Servidor e o módulo socket. Este projeto simula a funcionalidade básica de troca de mensagens de um servidor IRC (Internet Relay Chat) em um ambiente de terminal (CLI).
Este chat é uma demonstração prática dos conceitos de Programação de Sockets e Concorrência em redes de computadores.
| Característica | Detalhes |
|---|---|
| Arquitetura | Cliente-Servidor |
| Protocolo | TCP (Transmission Control Protocol) - Garantindo entrega confiável de mensagens. |
| Linguagem | Python 3 |
| Módulos Chave | socket e threading |
| Funcionalidade | Chat multiusuário em tempo real, com broadcast de mensagens para todos os clientes conectados. |
O projeto é dividido em dois componentes principais:
- Bind e Listen: Inicia um socket TCP na porta padrão (
55555) e aguarda por conexões. - Multithreading: Utiliza o módulo
threadingpara aceitar e gerenciar múltiplos clientes simultaneamente, dedicando uma thread para cada conexão ativa. - Broadcast: Retransmite mensagens recebidas de um cliente para todos os demais na rede.
- Concorrência: Emprega duas threads para garantir a usabilidade no terminal:
- Thread de Escrita: Gerencia a entrada do usuário (
input()) e envia os dados para o servidor. - Thread de Leitura: Recebe, em tempo real, as mensagens do servidor e as exibe no terminal.
- Thread de Escrita: Gerencia a entrada do usuário (
- Comando de Saída: Suporta o comando
/quitpara encerrar a sessão de forma limpa.
Para que o chat funcione em duas máquinas diferentes, a configuração de rede é um passo obrigatório.
- Certifique-se de ter o Python 3 instalado em todas as máquinas.
- O Servidor e o Cliente devem estar conectados à mesma rede (ex: mesma rede Wi-Fi).
Você deve descobrir o Endereço IP Local da máquina que irá rodar o server.py.
A. Encontre o IP do Servidor:
Na máquina do servidor, execute o comando apropriado no terminal:
| Sistema Operacional | Comando no Terminal | Exemplo de IP Local |
|---|---|---|
| Windows | ipconfig |
192.168.1.10 |
| Linux/macOS | ifconfig ou ip a |
10.0.0.5 |
B. Ajuste o Cliente:
Abra o arquivo client.py e altere a variável HOST para o endereço IP local que você acabou de encontrar (o IP da máquina do Servidor).
# client.py
# ATENÇÃO: Substitua '127.0.0.1' pelo IP REAL da máquina do SERVIDOR
HOST = '192.168.1.10'
PORT = 55555Abra terminais diferentes nas máquinas da sua rede:
Terminal 1 (Máquina do Servidor):
Inicie o servidor primeiro.
python server.pyTerminal 2, 3, etc. (Máquinas Cliente):
Inicie os clientes.
python client.pyApós iniciar, cada cliente será solicitado a escolher um nickname.
- Ordem: O servidor (
server.py) deve estar ativo e rodando antes que qualquer cliente tente se conectar. - IP e Porta: As configurações de
HOSTePORTnoclient.pydevem corresponder ao IP da máquina do servidor e à porta que ele está escutando. - Firewall: Este é o erro de rede mais comum.
- Sintoma: O cliente recebe erro de Connection Refused ou Timeout.
- Solução: É necessário abrir a porta
55555no Firewall da máquina que está executando o Servidor. Certifique-se de permitir o tráfego de entrada (Inbound) para o protocolo TCP.