我有这些代码行用于从python3.4中的UDP套接字发送和接收,我希望将文件从用户发送到另一个。 这是服务器端代码:
...
data = file.read(1024)
n = int(fileSize / 1024) + 1
for i in range(n):
if(self.sock.sendto(data.encode(), ('127.0.0.1',int(self.nextUserPort)))):
print ("Sending ...")
data = file.read(1024)
print ("File has been Sent Completely!!!")
self.sock.sendto("END#".encode(), ('127.0.0.1',int(self.nextUserPort)))
这是客户端代码:
....
d = self.sock.recvfrom(1024)
data = d[0].decode()
addr = d[1]
try:
while (data.strip().find("END#") != 0) :
file.write(data.decode())
time1 = time.time()
data, addr = self.sock.recvfrom(1024)
time2 = time.time()
print ("download speed is "+ str(1.0/(time2-time1))+" kbps")
print ("File Downloaded Completely!!!!!")
except socket.timeout :
file.close()
self.sock.close()
但是当我运行代码时,我会得到以下行f(self.sock.sendto(data.encode(), ('127.0.0.1',int(self.nextUserPort))))
的错误:
AttributeError: 'bytes' object has no attribute 'encode'
当我删除encode
时,我得到另一个错误,当我搜索它时,我得到了我必须在python3.4
编码。
答案 0 :(得分:1)
例外是告诉你问题是什么:
AttributeError:' bytes'对象没有属性'编码'
因为它发生了你想要发送的字节,所以不需要转换这行中的任何东西。
"END#".encode()
可以直接写为b"END#"
。
与您的问题无关:您可能需要使用TCP套接字或为传输提供一些逻辑来处理重新排序,丢失和重复的软件包。