在编写套接字程序时,原本在python2上可以运行的代码迁移到python3上后开始报错编码解码问题。
debug发现客户端和服务器端程序都需要做相应的修改。
客户端部分程序:
data = input('> ')
#这里输入的时str类型
if not data:
break
udpCliSock.sendto(data.encode(), ADDR)
#这里需要使用encode()将其转换为socket函数传输的bytes类型
data, ADDR = udpCliSock.recvfrom(BUFSIZ)
服务器端部分程序:
while True:
print("waiting for message...")
data, addr = udpSerSock.recvfrom(BUFSIZ)
data = data.decode()
#这里需要用decode()将传过来的字节流转为str类型
udpSerSock.sendto(('[%s] %s' % (ctime(), data)).encode(), addr)
#这里将收到的消息处理后再发给客户端,所以需要再次encode为bytes类型
print('...received from and returned to:', addr)