Python 列表问题';投射物的形状

Python 列表问题';投射物的形状,python,python-3.x,Python,Python 3.x,我正在尝试使简单的tcp服务器与多个客户端一起工作。为此,我需要使用select或poll方法。 我已经编写了TcpFileTransfer类: class TcpFileTransfer: def __init__(self, conn, adrr): self.fullsize = 0 self.sent = 0 self.interrupted = False self.conn =

我正在尝试使简单的tcp服务器与多个客户端一起工作。为此,我需要使用select或poll方法。 我已经编写了TcpFileTransfer类:

 class TcpFileTransfer:

    def __init__(self, conn, adrr):
            self.fullsize = 0
            self.sent = 0
            self.interrupted = False
            self.conn = conn
            self.address = adrr

    def dispose(self):
            self.interrupted = False
            self.sent = 0
            self.fullsize = 0

    def getconn(self):
           return self.conn
    def send_urgent(self):
            percentage = self.sent/self.fullsize
            if percentage < 1:
                    percentage *= 100
            else:
                    percentage = 100
            percentage = math.trunc(percentage)
            urgent = struct.pack('B', percentage)
            self.conn.send(urgent, socket.MSG_OOB)
            print(str(percentage) + "%")

    def download(self, data):
            if data.endswith("continue"):
                    data = data[0: -8]
                    self.interrupted = True
            filename = data[8:].strip()

            if os.path.exists(filename):
                    print("Start to download " + filename + "from server")
                    self.fullsize = os.path.getsize(filename)
            else:
                    print("File doesn't exist")
                    return

            with open(filename,'rb') as f:
                    self.conn.settimeout(2.0)
                    if self.interrupted:
                            f.read(self.sent)
                            self.sent += 1024
                    else:
                            self.sent = 1024
                    try:
                            bytes_to_send = f.read(1024)
                            i = 0
                            while bytes_to_send:
                                    self.conn.send(bytes_to_send)
                                    bytes_to_send = f.read(1024)
                                    self.sent += 1024
                                    i += 1
                                    if i % 20 == 0:
                                            self.send_urgent()
                    except socket.timeout:
                            print("Timeout Error")
                            self.interrupted = True
                            self.conn.close()
                            return
            print("Downloaded " + filename)
            self.dispose()

    def data_recieving(self):
            conn.setblocking(1)
            try:
                    udata = self.conn.recv(1024)
                    data = udata.decode("utf-8")
                    return data
            except BlockingIOError:
                    return None

    def tcp_loop(self):
            print("In loop")
            while True:
                    data = self.data_recieving()
                    if data:
                            print(data)
                            if data == "Quit":
                                    self.conn.close()
                                    s.close()
                                    sys.exit(0)
                            elif data == "Time":
                                    curtime = time.localtime()
                                    curtime = str(curtime)
                                    utime = curtime.encode("utf-8")
                                    self.conn.send(utime)
                            elif data.startswith("echo"):
                                    data = data[4:]
                                    print(data)
                                    self.conn.send(data.strip().encode("utf-8"))
                            elif data.startswith("download"):
                                    self.connection(self.conn)
                                    self.download(data)
                            else:
                                    print("Unrecognised command")
问题已经解决了。x变量的类型为

 <class '__main__.TcpFileTransfer'>

客户端的类型是

 <class 'socket.socket'>


为什么会发生这种强制转换?我应该使用什么来保存对象集合?

嗯,看起来您的
tcp\u客户端中有一个套接字。你需要向我们展示所有代码,这些代码都是添加到列表中的。这需要一个。事实上,我们没有办法回答这个问题。
 <class 'socket.socket'>