Я думаю, вам нужно вызывать s.listen перед каждым подключением. То есть положить его в бесконечный цикл.
у многопоточный, многопользовательский сервер на Python. Несколько пользователей могут подключиться к нему через telnet и в основном использовать его в качестве сервера чата. Я могу соединиться с двумя клиентами через telnet, но столкнулся с двумя следующими проблемами:
Первый клиент, отправивший сообщение, немедленно отключается.Другой клиент не получает сообщение, отправленное первым клиентом.Код сервера:
import os
import sys
import socket
import thread
port = 1941
global message
global lock
global file
def handler(connection):
while 1:
file = connection.makefile()
file.flush()
temp = file.readline()
if temp == 'quit':
break
lock.acquire()
message += temp
lock.release()
file.write(message)
file.close()
acceptor = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
acceptor.bind(('', port))
acceptor.listen(10)
lock = thread.allocate_lock()
while 1:
connection, addr = acceptor.accept()
thread.start_new_thread(handler, (connection,))
Хорошо, я слушал unholysampler, и теперь у меня есть это. Я могу соединиться с обоими клиентами сейчас и набирать сообщения, но они не отправляются / не принимаются (я не могу сказать, какой из них).
import os
import sys
import socket
import thread
port = 1953
def handler(connection):
global message
global filelist
filelist = []
file = connection.makefile()
file.flush()
filelist.append(file)
message = ''
while 1:
i = 0
while i < (len(filelist)):
filelist[i].flush()
temp = filelist[i].readline()
if temp == 'quit':
break
with lock:
message += temp
i = i + 1
file.close()
global lock
acceptor = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
acceptor.bind(('', port))
acceptor.listen(10)
lock = thread.allocate_lock()
while 1:
connection, addr = acceptor.accept()
thread.start_new_thread(handler, (connection,))