Я бы хотел иметь возможность легко взаимодействовать с различными сессиями.Сейчас каждое отдельное соединение находится в отдельном потоке, но все, что отправляется на сервер, компилируется в один и тот же список.
import socket
import time
import threading
class threadedServer(object):
threads = []
messages = []
def __init__(self, host, port):
self.host = host
self.port = port
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.bind((self.host, self.port))
def listen(self):
self.sock.listen(5)
while True:
conn, addr = self.sock.accept()
print('Connected by ' + str(addr[0]) +':' + str(addr[1]))
conn.settimeout(20)
newThread = threading.Thread(group=None, target = self.ListenToClient,args = (conn,addr))
newThread.start()
threadedServer.threads.append(newThread)
print(threading.enumerate())
def ListenToClient(self, conn, addr):
while True:
try:
data = conn.recv(1024)
if data:
threadedServer.messages.append(data)
print(threadedServer.messages)
response = 'Recieved'
conn.send(response.encode())
else:
raise error('Client Disconnected')
except:
conn.close()
return False
def main():
beginning = input('\n1) Start Server \n2) Check Number of Connections \n>> ')
if beginning == '1':
while True:
port_num = input("Port? ")
try:
port_num = int(port_num)
threadedServer('10.148.198.201',port_num).listen()
break
except ValueError:
pass
elif beginning == '2':
print('')
print(threading.enumerate())
print('')
main()
if __name__ == '__main__':
main()
Несколько вопросов.Во-первых, после запуска сервера я бы хотел вернуться в меню параметров с такими параметрами, как завершение потока, взаимодействие с потоком, просмотр открытых текущих потоков и тому подобное.Что-то похожее на меню опций в начале main ().Также прямо сейчас все, что отправляется на сервер, помещается в список сообщений, я хотел бы иметь отдельный список для каждой открытой цепочки, в которую отправляются их сообщения.Моя идея заключается в том, что мой основной поток должен быть тем, в котором запущено меню параметров, и иметь потоки в фоновом режиме, которые прослушиваются и подключаются;Тем не менее, я не нашел способ изменить основной поток.Я на Windows.