发送和接收UDP套接字python3.4

时间:2015-12-21 19:26:53

标签: python sockets python-3.x

我有这些代码行用于从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编码。

1 个答案:

答案 0 :(得分:1)

例外是告诉你问题是什么:

  

AttributeError:' bytes'对象没有属性'编码'

因为它发生了你想要发送的字节,所以不需要转换这行中的任何东西。

"END#".encode()可以直接写为b"END#"

与您的问题无关:您可能需要使用TCP套接字或为传输提供一些逻辑来处理重新排序,丢失和重复的软件包。

相关问题