a bytes-like object is required, not ‘str‘

在将Python2的套接字程序迁移到Python3时,遇到编码和解码错误。客户端和服务器端都需要修改,客户端需对输入数据使用encode()转为bytes类型发送,而服务器端则需用decode()将接收到的字节流转换回str类型。同时,服务器端在回发消息时,也要进行encode操作。
摘要由CSDN通过智能技术生成

在编写套接字程序时,原本在python2上可以运行的代码迁移到python3上后开始报错编码解码问题。

debug发现客户端和服务器端程序都需要做相应的修改。

  1. 客户端部分程序:

data = input('> ')

#这里输入的时str类型

if not data:

break

udpCliSock.sendto(data.encode(), ADDR)

#这里需要使用encode()将其转换为socket函数传输的bytes类型

data, ADDR = udpCliSock.recvfrom(BUFSIZ)

  1. 服务器端部分程序:

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)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值