Python 列表问题';投射物的形状
我正在尝试使简单的tcp服务器与多个客户端一起工作。为此,我需要使用select或poll方法。 我已经编写了TcpFileTransfer类: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 =
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'>