-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.py
More file actions
72 lines (51 loc) · 1.63 KB
/
server.py
File metadata and controls
72 lines (51 loc) · 1.63 KB
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
64
65
66
67
68
69
70
71
72
import socket
from threading import Thread
ServerSide = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ServerSide.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
ServerSide.bind(("0.0.0.0", 8080))
clientlist = []
def exceptHandler(client):
leaveMsg = "***" + name + "has left the chat ***"
print(leaveMsg)
if client in clientlist:
clientlist.remove(client)
for i in clientlist:
i[1].send(leaveMsg.encode('ascii'))
return True
def Clientthread(client, name):
breakLoop = False
msg = ''
while True:
try:
while msg == '':
msg = client.recv(1024)
msg = msg.decode('ascii')
sendmsg = name + ' : ' + msg
except ConnectionResetError:
breakLoop = exceptHandler([name, client])
for i in clientlist:
try:
i[1].send(sendmsg.encode('ascii'))
except BrokenPipeError:
breakLoop = exceptHandler(i)
print(sendmsg)
if breakLoop == True:
break
ServerSide.listen()
print("------- Server Activated -------")
while True:
ClientSide, address = ServerSide.accept()
print()
print("-- Client found --")
name = ClientSide.recv(1024)
name = name.decode('ascii')
clientlist.append([name, ClientSide])
print("--- Client connected :", name, "---")
print()
ClientHandler = Thread(target=Clientthread, args=(ClientSide, name))
ClientHandler.start()
print(len(clientlist))
if len(clientlist) == 0:
print("Server Closed - no availabe clients")
break
ServerSide.close()