Ir para conteúdo
Fórum Script Brasil
  • 0

Chat Python - Dúvida/Erro


teonacio

Pergunta

Olá,

estou desenvolvendo (para estudo apenas) um código para um chat em python, e me deparei com um erro durante a comunicação cliente-servidor, gostaria de uma orientação acerca do mesmo, visto que não consigo identificar uma soluçao. Segue o código e a imagem do erro.

Servidor:

import threading # threads
from socket import * # sockets

clientes_conn = [] # Lista de conexões/clientes
clientes_name = [] # Lista dos nomes das conexões
 
class minhaThread (threading.Thread):
    def __init__(self, threadID, threadName, connectionSocket):
        threading.Thread.__init__(self)
        self.id = threadID
        self.name = threadName
        self.conn = connectionSocket
    def run(self):
        chat_geral(self.conn,self.name)

'''
param == 1 => Mensagem do sistema
param == 2 => Mensagem do cliente
'''
def enviar_mensagem(msg, name, param):
    for conn in clientes_conn:
        conn.send(msg)
    if param == 1:
        print msg
    else:
        print "("+name+"): "+msg 

def adicionar_cliente(connectionSocket, _id):
    while 1:
        message2 = connectionSocket.recv(1024)
        if message2 == "":
            continue
        if message2 in clientes_name:
            serverSocket.send("O nome informado está sendo usado por um cliente atualmente.\n")
            continue
        clientes_conn.append(connectionSocket)
        clientes_name.append(message2)
        success = "Cliente '"+str(message2)+"' conectado com sucesso!"
        enviar_mensagem(success, message2, 1)

        # Entra no terceiro while 1
        thread = minhaThread(_id, message2, connectionSocket).start()
        
        clientes_conn.remove(connectionSocket)
        clientes_name.remove(message2)
        connectionSocket.close()
        break

def chat_geral(connectionSocket, name):
    while 1:
        msg = connectionSocket.recv(1024)
        if msg == "Sair" or msg == "sair":
            sair = "Cliente "+name+" está saindo do chat."
            enviar_mensagem(sair, name, 1)
            break
        enviar_mensagem(msg, name, 2)

serverName = 'localhost'
serverPort = 8080
serverSocket = socket(AF_INET,SOCK_STREAM)
serverSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
serverSocket.bind((serverName,serverPort))
serverSocket.listen(1)
print "Servidor TCP esperando conexoes na porta %d ..." % (serverPort)

id_padrao = 0
while 1:
    connectionSocket, address = serverSocket.accept()
    print "Cliente "+str(address[1])+" tentando se conectar..."
    adicionar_cliente(connectionSocket, id_padrao)
    id_padrao += 1
serverSocket.close()

Cliente:

from socket import * # sockets
import threading # threads

class minhaThread (threading.Thread):
    def __init__(self, threadName, clientSocket):
        threading.Thread.__init__(self)
        self.name = threadName
        self.conn = clientSocket
    def run(self):
        chat_geral(self.name,self.conn)

def conectar_chat(clientSocket):
    while 1:
        msg = raw_input("Digite seu nome: ")
        clientSocket.send(msg)
        message = clientSocket.recv(1024)
        print message
        if message.find("conectado com sucesso") != -1:
            thread = minhaThread(msg,clientSocket).start()
            break

def chat_geral(name,clientSocket):
    while 1:
        msg = raw_input("Digite (mensagem/comando): ")
        clientSocket.send(msg)
        msg2 = clientSocket.recv(1024)
        if msg2 == "saindo do chat" and msg.find(name) != -1:
            print "Desconectando do server."
            break
        print msg2

# definicao das variaveis
serverName = 'localhost' # ip do servidor
serverPort = 8080 # porta a se conectar
clientSocket = socket(AF_INET,SOCK_STREAM) # criacao do socket TCP
clientSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
clientSocket.connect((serverName,serverPort)) # conecta o socket ao servidor
while 1:
    conectar_chat(clientSocket)
    break
clientSocket.close()

Imagem do erro:

http://i.imgur.com/ai0HoCo.jpg

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...