Problem creating a chat server in python

0

I have a problem with a chat that I am creating, when 2 clients connect to the server, the first one that is connected is printed many line breaks and when a message is sent it is not printed on the other side, here I leave it the code:

client:

#-*-coding:utf-8-*-
from socket import *
from cryptography.fernet import Fernet
from sys import argv
from platform import python_version as pv
from threading import * 
def readmsj():
    while True:
        try:
            content = sock.recv(1024)
            token = f.decrypt(content)
            print(token.decode())
        except:
        pass

if __name__ == '__main__':
    if str(pv())[0] == "3":
        raw_input = input
    sock = socket(AF_INET, SOCK_STREAM)
    sock.connect((argv[1], int(argv[2])))
    if len(argv) != 4:
        key = Fernet.generate_key()
        print(key.decode())
    else:
        key = argv[3].encode()
    f = Fernet(key)
    reader = Thread(target=readmsj)
    reader.daemon = True
    reader.start()
    msj = " "
    while msj != "exit":
        msj = raw_input(">>>>")
        msj = msj.encode()
        sock.send(f.encrypt(msj))

server:

#-*-coding: utf-8-*-
from socket import *
from threading import *
from platform import python_version as pv
from platform import platform
from os import system, chdir, getcwd
class Server():
    def __init__(self):
        self.users = []
        cmd = ""
        if str(pv())[0] == "3":
            raw_input = input
        if str(platform())[0] == "W":
            clear = "cls"
        else:
            clear = "clear"
        self.accept_connections = True
        self.send2all = True
        self.sock = socket(AF_INET, SOCK_STREAM)
        self.sock.bind(("0.0.0.0", 5000))
        self.sock.listen(4)
        self.sock.setblocking(False)
        esperar = Thread(target=self.connect)
        esperar.daemon = True
        esperar.start()
        escuchar = Thread(target=self.hearall)
        escuchar.daemon = True
        escuchar.start()
        while cmd != "exit":
            try:
                cmd = raw_input("{}-->".format(getcwd(  )))
                if cmd[:2] == "cd":
                    chdir(cmd[3:])
                elif cmd == clear:
                    system(clear)
                elif cmd[:4] == "stop":
                    if cmd[5:] == "connect":
                        self.accept_connections = False
                    elif cmd[5:] == "hearall":
                        self.send2all = False
                else:
                    print("Comando no reconocido.")
            except Exception as e:
                print(e)
        self.sock.shutdown(SHUT_RDWR)
        self.sock.close()
    def connect(self):
        while self.accept_connections:
            try:
                conn = self.sock.accept()[0]
                conn.setblocking(False)
            except:
                pass
    def hearall(self):
        while self.send2all:
            try:
                for ip in self.users:
                    recv = ip.recv(1024)
                    if recv:
                        self.sendall(recv, ip)
            except:
                pass
    def sendall(self, msg, sndr):
        for ip in self.users:
            if ip == sndr:
                continue
            else:
                try:
                    ip.send(msg)
                except:
                    print("{} se ha desconectado.".format(ip))
                    self.users.remove(ip)
if __name__ == '__main__':
    main = Server()
    
asked by binario_newbie 02.12.2018 в 00:43
source

0 answers