-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.py
63 lines (48 loc) · 1.96 KB
/
server.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import socket
import threading
#import chat
class Server(object):
def __init__(self, hostname, port):
self.clients = {}
# create server socket
self.tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.tcp_server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# start server
self.tcp_server.bind((hostname, port))
self.tcp_server.listen(5)
print("[INFO] Server running on {}:{}".format(hostname, port))
while True:
connection, address = self.tcp_server.accept()
nickname = connection.recv(1024)
nickname = nickname.decode()
self.clients[nickname] = connection
# start a thread for the client
threading.Thread(target=self.receive_message, args=(connection, nickname), daemon=True).start()
print("[INFO] Connection from {}:{} AKA {}".format(address[0], address[1], nickname))
print("Total people connected: ",len(self.clients))
def receive_message(self, connection, nickname):
print("[INFO] Waiting for messages")
while True:
try:
msg = connection.recv(1024)
self.send_message(msg, nickname)
print(nickname + ": " + msg.decode())
except:
connection.close()
#remove user from users list
del(self.clients[nickname])
break
print(nickname, " disconnected")
def send_message(self, message, sender):
if len(self.clients) > 0:
for nickname in self.clients:
if nickname != sender:
msg = sender + ": " + message.decode()
self.clients[nickname].send(msg.encode())
#def totalClients():
count = len(self.clients)
return count
if __name__ == "__main__":
port = 5555
hostname = "0.0.0.0"
chat_server = Server(hostname, port)