- Запустите сервер и прослушивайте входящие соединения
- запустите других клиентов, позвольте им подключиться к серверу
- Когда пользовательский клиент подключается, сервер должен обнаружить его и запустить пользовательский поток
- Клиент пользователя должен отправить данные на сервер, сообщая ему, к какому клиенту подключиться
- Затем сервер должен начать туннелирование информации между клиентом пользователя и выбранным клиентом
Код: Выделить всё
def handle_client(conn, addr):
print(f"Connection established with {addr}.")
while True:
try:
data = conn.recv(1024) # Receive data from the client
if not data:
break # Terminate the connection if no data is received
print(f"Received from {addr}: {data.decode()}")
conn.sendall(f"Server response: {data.decode()}".encode()) # Send the received data back to the client
except ConnectionResetError:
print(f"Client {addr} has disconnected.")
break
conn.close()
print(f"Connection with {addr} closed.")# Start the server
def start_server():
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server_socket:
server_socket.bind((HOST, PORT))
server_socket.listen()
print(f"Server listening on {HOST}:{PORT}...")
while True:
conn, addr = server_socket.accept() # Accept a client connection
thread = threading.Thread(target=handle_client, args=(conn, addr))
thread.start() # Start a new thread for each client
print(f"Active connections: {threading.activeCount() - 1}")
if __name__ == "__main__":
start_server()
Код: Выделить всё
##Code to handle user cLient
def handle_user(conn, addr,in_q):
print(f"Connection established with {addr}.")
while True:
try:
data = conn.recv(1024).decode() # Receive data from the client
if not data:
break # Terminate the connection if no data is received
in_q.put(data)
time.sleep(3)
toClient = in_q.get()
conn.sendall({data.encode()})
except ConnectionResetError:
print(f"Client {addr} has disconnected.")
break
conn.close()
print(f"Connection with {addr} closed.")# Start the server
#code to handle other clients
def handle_client(conn,addr):
print(f"Connection established with {addr}.")
while True:
try:
conn.sendall()
data = conn.recv(1024) # Receive data from the client
if not data:
break # Terminate the connection if no data is received
print(f"Received from {addr}: {data.decode()}")
conn.sendall(f"Server response: {data.decode()}".encode()) # Send the received data back to the client
except ConnectionResetError:
print(f"Client {addr} has disconnected.")
break
conn.close()
def start_server():
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server_socket:
server_socket.bind((HOST, PORT))
server_socket.listen()
print(f"Server listening on {HOST}:{PORT}...")
q = Queue() #create a new queue
while True:
conn, addr = server_socket.accept() # Accept a client connection
if addr == '10.9.0.2':
User_thread = threading.Thread(target=handle_user, args=(conn, addr,q))
User_thread.start() # Start thread to handle User
conn.sendall(f"Which server would you like to connect to?\n0)to termiante connection\n1)UK\n2)Nowray\n3)Egypt")
data = conn.recv(1024).decode() # Receive data from the client
if data == 1:
t1.start()
elif data == 2:
t2.start()
elif data == 3:
t3.start()
elif addr == '10.9.0.3':
t1 = threading.Thread(target=handle_client, args=(conn, addr,q))
# Start a new thread for each client
elif addr == '10.9.0.4':
t2 = threading.Thread(target=handle_client, args=(conn, addr,q))
t2.start() # Start a new thread for each client
elif addr == '10.9.0.5':
t3 = threading.Thread(target=handle_client, args=(conn, addr,q))
t3.start() # Start a new thread for each client
print(f"Active connections: {threading.activeCount() - 1}")
if __name__ == "__main__":
start_server()
TLDR: мне нужен способ выбирать, с какими потоками я работаю в любой момент времени, на основе входных данных из пользовательского потока
Подробнее здесь: https://stackoverflow.com/questions/798 ... -in-python
Мобильная версия