-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.py
49 lines (42 loc) · 1.55 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
import socket
import signal #identifie les signaux pour kill le programme
import sys #utilisé pour sortir du programme
import time
from clientthread import ClientListener
import json
class Server():
def __init__(self, port):
self.listener= socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.listener.bind(('', port))
self.listener.listen(1)
print("Listening on port", port)
self.clients_sockets= []
signal.signal(signal.SIGINT, self.signal_handler)
signal.signal(signal.SIGTERM, self.signal_handler)
def signal_handler(self, signum, frame):
self.listener.close()
self.echo("QUIT")
def run(self):
while True:
print("listening new customers")
try:
(client_socket, client_adress) = self.listener.accept()
except socket.error:
sys.exit("Cannot connect clients")
self.clients_sockets.append(client_socket)
print("Start the thread for client:", client_adress)
client_thread= ClientListener(self, client_socket, client_adress)
client_thread.start()
time.sleep(0.1)
def remove_socket(self, socket):
self.client_sockets.remove(socket)
def echo(self, data):
print("echoing:", data)
for sock in self.clients_sockets:
try:
sock.sendall(data.encode("UTF-8"))
except socket.error:
print("Cannot send the message")
if __name__ == "__main__":
server= Server(59002)
server.run()