异步套接字

5

我该如何与多个客户端建立连接?一旦连接了多个客户端,我该如何从每个客户端接收独立的数据?据我所知,我需要使用一个叫做“Asyncore”的东西。我该如何实现它?

客户端类

import socket
class Client():
    def __init__(self):
        self.host = 'localhost'
        self.port = 5000

        self.s = socket.socket()
        self.s.connect((self.host, self.port))
        self.s.send(str.encode(input("What is your name ")))

x = Client()

主机类

import socket
class Host():
    def __init__(self):
        self.host = 'localhost'
        self.port = 5000

        self.s = socket.socket()
        self.s.bind((self.host, self.port))
        self.s.listen(5)
        self.c, self.addr = self.s.accept()
        print("User from " + str(self.addr) + " has connected")
        while True:
            data = self.c.recv(1024)
            if not data:
                break

            print(str(self.addr) +" name is " + data.decode("utf-8"))
            #c.send(str.encode(whatever))
        self.c.close()

x = Host()

1
你是指 asyncio 吗?https://docs.python.org/3/library/asyncio.html asyncore 已被 asyncio 取代。注意:此模块仅用于向后兼容。对于新代码,我们建议使用 asyncio。 - Padraic Cunningham
1个回答

2

您是否在寻找此工具?asyncore

这里是一个链接,您可以找到所有与异步套接字处理程序相关的信息。

https://docs.python.org/2/library/asyncore.html

编辑:dano的评论也很棒

祝您使用愉快!


是的,那就是我的意思。我已经阅读了文档,但似乎无法理解asyncore如何处理多个客户端。 - JGerulskis
也许这个链接会更有帮助:http://stackoverflow.com/questions/10605083/python-asyncore-keep-track-of-clients ;) - Oscar Bralo
如果Python 3是一个选项,我建议使用asyncio而不是asyncore。如果不是,您可以使用trollius,它是将asyncio移植到Python 2.x的后移版本。 - dano
谢谢dano。如果您使用了其中一些内容,那么dano的答案是正确的。我只是尝试并通过“Google”找到了一些信息:P - Oscar Bralo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接