Как получить несколько клиентских подключений к одному серверу? - PullRequest
0 голосов
/ 09 января 2019

Я хочу, чтобы несколько клиентов подключались к одному серверу и могли общаться, не мешая друг другу.

Клиентский код (в этом прототипе ничего не нужно менять, просто, если хотите, его основу):

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-адрес, чтобы не вызывать дальнейших проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...