Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import socket
- import threading
- class ThreadedServer(object):
- def __init__(self, host, port):
- self.host = host
- self.port = port
- self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
- self.sock.bind((self.host, self.port))
- self.clients = {}
- def listen(self):
- self.sock.listen(5)
- while True:
- client, address = self.sock.accept()
- client.settimeout(60)
- self.clients[client] = ''
- threading.Thread(target = self.listenToClient,args = (client,address)).start()
- def listenToClient(self, client, address):
- size = 1024
- while self.clients[client] == '':
- client.send(b"Please pick a username: ")
- username = client.recv(size)
- if username in self.clients.values():
- client.send(b"User iname is in use. ")
- else:
- self.clients[client] = username
- other_users = [x.decode() for x in self.clients.values()]
- welcome_string = "Welcome, other users connected: {}".format(",".join(other_users))
- client.send(welcome_string.encode())
- while True:
- try:
- data = client.recv(size)
- if data:
- # Set the response to echo back the recieved data
- response = data
- self.send_to_others(client)
- else:
- raise error('Client disconnected')
- self.send_to_others(client, '{} disconnected'.format(username).encode())
- self.client.remove(client)
- except:
- client.close()
- self.send_to_others(client, '{} disconnected'.format(username).encode())
- del self.clients[client]
- return False
- def send_to_others(self, me, message):
- for other_client in self.clients:
- if other_client is not me:
- response_string = "{}: {}".format(self.clients[me], message.decode())
- other_client.send(response_string.encode())
- if __name__ == "__main__":
- while True:
- port_num = 44445 # input("Port? ")
- try:
- port_num = int(port_num)
- break
- except ValueError:
- pass
- ThreadedServer('',port_num).listen()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement