Я хочу, чтобы несколько клиентов подключались к одному серверу и могли общаться, не мешая друг другу.
Клиентский код (в этом прототипе ничего не нужно менять, просто, если хотите, его основу):
import socket
host = "X.X.X.X"
port = 8008
def Main(s, i):
if i == 1:
data = s.recv(1024).decode("utf-8")
print(data)
i = 0
message = input("-> ")
if " " in message:
[task, info] = message.split(" ")
else:
task = message
task = task.lower()
if task == "exit":
exit()
elif task.startswith("echo"):
s.send(message.encode("utf-8"))
data = s.recv(1024).decode("utf-8")
print(data)
else:
print("Incorrect input!")
Main(s, 0)
def connect():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
Main(s, 1)
if __name__ == '__main__':
s = connect()
Код сервера (упрощенный прототип для только для одного клиента ):
import socket
import time
host = "X.X.X.X"
port = 8008
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host,port))
def connect():
s.listen(5)
c, address = s.accept()
print("Connected to " + str(address) + "!")
return c, address
def Main(i, c, address):
try:
if i == 1:
message = ("Server: Hello " + host + " pleased to meet you.")
c.send(message.encode("utf-8"))
del message
while True:
message = c.recv(1024).decode("utf-8")
if not message:
break
elif " " in message:
[task, info] = message.split(" ")
else:
task = message
if task == "echo":
c.send(info.encode("utf-8"))
del info
Main(0, c, address)
except:
print("Timed out from " + str(address) + "!")
[c, address] = connect()
Main(1, c, address)
if __name__ == "__main__":
[c, address] = connect()
Main(1, c, address)
while 1:
Main(0, c, address)
time.sleep(0.9997)
Что я хочу по сравнению с обычным обычным типом сервера:
-Я ожидаю, что сервер будет обновлять себя каждую секунду. При этом ищите входящие соединения и принимайте их.
-Я также ожидаю, что он сможет искать, если какой-либо из клиентов отключился, и удалить его IP-адрес, чтобы не вызывать дальнейших проблем.