Socket + python как сделать чтобы сразу несколько пользователей поключались к серверу?
хотел попробовать создать сервер но наткнуля на ошибку что если подключается больше 1 человека то выдает ошибку: Traceback (most recent call last): File "host.py", line 20, in data = conn.recv(1024) OSError: [WinError 10038] Сделана попытка выполнить операцию на объекте, не являющемся сокетом
вот мой код: host.py
import socket
import random
sock = socket.socket()
sock.bind(('127.0.0.1', 80))
sock.listen(1)
conn, addr = sock.accept()
print ('connected:', addr)
f = open('host_base.txt')
for line in f:
line
f = open('text.txt', 'w')
f.write(str(addr))
key = random.randint(1000, 9999)
print(key)
while True:
data = conn.recv(1024)
conn.sendall(bytes(str(key),'UTF-8'))
conn.sendall(data.upper())
conn.close()
Ответы (1 шт):
Автор решения: Kers
→ Ссылка
По идее Вам нужен не блокирующий сокет. Посмотрите примеры с setblocking(). Один из шаблонов из моих заметок:
import socket
import time
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
sock.bind(("", 8001))
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,
1)
sock.listen(5)
sock.setblocking(False) # Не блокирующий режим,
# при отсутвии клиента работа продолжается и вызывается исключение нет данных
while True:
try:
client, addr = sock.accept()
client.setblocking(False)
except socket.error:
print(">>> CLIENT NOT FOUND!")
except KeyboardInterrupt:
print("ERR")
sock.close()
break
else:
result = client.recv(1024)
client.send(b"Done!")
client.close()
print("Message: ", result.decode("utf-8"), addr)
time.sleep(1) # Проверять каждую секунду можно УДАЛИТЬ!